.ToString(),(string)或String。什么时候用?

时间:2011-02-10 19:30:58

标签: c# .net asp.net asp.net-mvc

我遇到了一个困扰我的小虫。

我有JObject,我认为会很好
obj["role"].ToString()

字符串就在那里。最后的手段是改为

(string)obj["role"] 

只是为了看看会发生什么并且有效。我的问题是如何知道何时使用.ToString()而不是(字符串)而不是“as String”。

3 个答案:

答案 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 exceptionas运算符也尝试强制转换,但如果实例不是字符串但返回null,则不会抛出异常。当然ToString方法来自System.Object,所以它取决于tyhe底层类型是否覆盖了它。

答案 2 :(得分:0)

它不应该对你的例子产生影响。它会产生影响的唯一情况是,如果在string类型上定义了用户类型转换(到obj["role"])。在这种情况下,可能是string的强制转换将其更改为另一个对象,.ToString()的实现方式不同。