是什么原因`.toString()`方法在value为null时抛出异常而Convert`.ToString()`自动处理空值

时间:2015-09-05 11:39:27

标签: c# methods

.ToString()方法在值为空时抛出异常的原因是什么,Convert.ToString()自动处理C#中的空值。

2 个答案:

答案 0 :(得分:8)

Object.ToString()是在Object类的实例上调用的实例方法。如果该实例是空引用,那么您正在调用一个不存在的实例的方法(未实例化,不引用任何内容)。在引用null的引用上调用任何方法都会产生空引用异常。

另一方面,Convert.ToString(someObject)Convert类的静态方法,它接受实例someObject并将其转换为字符串。在这种情况下, someObject 是方法的参数,因此它可以为null。

答案 1 :(得分:2)

ToString()null对象上调用异常是不正确的,因为在null对象上调用的任何方法都会抛出异常。 CLR在之前检查对象null ,然后决定调用哪个对象ToString,查看null,并抛出异常。

另一方面,

Convert.ToString()是静态调用的,所以它不会立即抛出。现在,方法本身而不是CLR有机会检查null的对象,并返回在这种情况下返回的任何内容。

C#让您与?.运算符具有几乎相同的效果:如果您这样做

string s = obj?.ToString();

snull,当objnull时,不会抛出异常。