我遇到了一个困扰我的bug。我有一个JObject,我认为它应该没有问题
obj["role"].ToString()
字符串出现了且一切正常。最后的办法是改用一个
(string)obj["role"]
只是为了看看会发生什么,并且它能够工作。我的问题是如何知道何时使用.ToString(),而不是(string)或"as String"。
我遇到了一个困扰我的bug。我有一个JObject,我认为它应该没有问题
obj["role"].ToString()
字符串出现了且一切正常。最后的办法是改用一个
(string)obj["role"]
只是为了看看会发生什么,并且它能够工作。我的问题是如何知道何时使用.ToString(),而不是(string)或"as String"。
string s = (string)obj["role"];
否则,这将会给你一个InvalidCastException异常。string s = obj["role"] as String;
如果obj["role"]
不是string
类型,也不是有显式类型转换到string
的类的实例,则会将s
设置为null
。请注意,对于as
操作符,显式转换运算符会被忽略。
如果obj["role"]
既不是string
类型,也不是具有显式类型转换为string
的类的实例,则必须执行以下操作:string s = obj["role"].ToString();
但要小心,后者可能会抛出NullReferenceException
异常。
obj["role"]
所代表的类型上定义了用户类型转换(转换为string
)。在这种情况下,将其强制转换为string
可能会将其更改为另一个对象,从而导致.ToString()
的实现方式不同。
System.Object
,它具有一个.ToString()
方法。我还没有找到一个仅仅调用.ToString()
就会抛出空引用异常的对象。在我给你打负分之前,你能举个例子吗? - Basicobj["role"]
为null
,那么调用obj["role"].ToString()
将会抛出一个NullReferenceException
异常,因为我们试图对一个null
引用进行解引用操作。 - jasonstring s = (obj["role"] ?? string.Empty).ToString();
这样的代码,以避免NullReferenceException
。但我无法确定这是否是良好的编程实践。 - Matt DeKrey.ToString()
的问题 - 但无论如何,好答案,+1 :) - Basicx
为null
,则x.ToString()
应该返回null
(在某些情况下是String.Empty
),而不是意识到他们正在尝试取消引用一个null
引用。 - jason