c# - CLR 问题。为什么 C# 中的方法重载决定 null 是一个字符串?

标签 c# clr

<分区>

Possible Duplicate:
C#: Passing null to overloaded method - which method is called?

这是一个测试用例

object a = null;
var b = Convert.ToString (null);
var c = Convert.ToString (a);
string d = Convert.ToString (null); // CLR chooses Convert.ToString(string value)
string e = Convert.ToString (a); // CLR chooses Convert.ToString(object value)

问题是为什么 CLR 决定在第一种情况下将 null 解释为字符串? 看来这个问题已经有人回答了here

这是另一个类似的案例。这些 if 都不会被触发

object x = null;
if (x is object)
{
    Console.Write ("x is object");
}

if (x is string)
{
    Console.Write ("x is string");
}

if (null is object)
{
    Console.Write ("null is object");
}

if (null is string)
{
    Console.Write ("null is string");
}

最佳答案

答案是因为它必须选择一个引用类型(null 对值类型不起作用),并且每个 string 都是一个 object,但不是每个 object 是一个字符串See Jon Skeet's answer to this question for more information.

作为对您的第二个示例的回应,如果将 null 变量传递给 is,无论发生什么情况,它的计算结果始终为 false。

关于c# - CLR 问题。为什么 C# 中的方法重载决定 null 是一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641815/

相关文章:

c# - 为什么 C# 不支持通过引用传递的运算符重载?

c++-cli - 托管 C++ 中 future 和 promise 的替代方案是什么

c# - 如何在exe中隐藏重要的字符串变量值

c# - 使用 select 和 bool 数组过滤字符串数组

.net - Sqlite 数据类型映射到 .net (CLR) 框架数据类型

clr - 适用于托管应用程序的 Microsoft Application Verifier 的等效项

c# - Visual Studio 2017 Asp.Net Core 项目不会在构建时复制依赖的 dll 文件

c# - 如何使用方法语法重写这一行?

c# - 如何将 css 类添加到 ASP.Net 中的更新面板?

.net - .NET CLR JIT 是否每次都编译每个方法?