.ToString()
方法在值为空时抛出异常的原因是什么,Convert.ToString()
自动处理C#中的空值。
答案 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();
s
为null
,当obj
为null
时,不会抛出异常。