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

Ser*_*jev 6 c# clr

可能重复:
C#:将null传递给重载方法 - 调用哪个方法?

这是一个测试用例

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)
Run Code Online (Sandbox Code Playgroud)

问题是为什么CLR决定在第一种情况下将null解释为字符串?看来这个问题已在这里得到解答

这是另一个类似的案例.这些ifs都没有被触发

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");
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ley 2

答案是因为它必须选择一个引用类型(null 不适用于值类型),并且 everystring是 an object,但不是 everyobject都是 a string有关更多信息,请参阅乔恩·斯基特对此问题的回答。

针对您的第二个示例,如果将 null 变量传递给is,则无论如何,它的计算结果将始终为 false。