我遇到了一个困扰我的小虫。
我有JObject,我认为会很好obj["role"].ToString()
字符串就在那里。最后的手段是改为
(string)obj["role"]
只是为了看看会发生什么并且有效。我的问题是如何知道何时使用.ToString()而不是(字符串)而不是“as String”。
答案 0 :(得分:19)
如果对象是string
,或者(string)
有明确的强制转换操作符,那么可以说
string s = (string)obj["role"];
否则,这将为您提供InvalidCastException
。
请注意,您可以在这里说
string s = obj["role"] as String;
如果s
不是null
的实例,会将obj["role"]
设置为string
。 请注意,对于as
,将忽略显式强制转换运算符。
如果obj["role"]
既不是string
,也不是具有string
显式强制转换操作符的类的实例,则必须说
string s = obj["role"].ToString();
但要小心,后者可以抛出NullReferenceException
。
答案 1 :(得分:1)
(string)
将实例强制转换为字符串,如果您尝试强制转换的对象不是字符串,则它可能会在运行时throw an exception。 as
运算符也尝试强制转换,但如果实例不是字符串但返回null,则不会抛出异常。当然ToString
方法来自System.Object,所以它取决于tyhe底层类型是否覆盖了它。
答案 2 :(得分:0)
它不应该对你的例子产生影响。它会产生影响的唯一情况是,如果在string
类型上定义了用户类型转换(到obj["role"]
)。在这种情况下,可能是string
的强制转换将其更改为另一个对象,.ToString()
的实现方式不同。