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

MrM*_*MrM 9 .net c# asp.net asp.net-mvc

我碰到了一个困扰我的虫子.我有JObject,我认为会很好

obj["role"].ToString()
Run Code Online (Sandbox Code Playgroud)

字符串在那里和一切.最后的手段是改为

(string)obj["role"] 
Run Code Online (Sandbox Code Playgroud)

只是看看会发生什么,它的工作原理.我的问题是我怎么知道何时使用.ToString()而不是(字符串)而不是"as String".

jas*_*son 20

如果对象是a string,或者有一个显式的强制转换操作符(string),那么可以这么说

string s = (string)obj["role"];
Run Code Online (Sandbox Code Playgroud)

否则,这将给你一个InvalidCastException.

请注意,你可以这么说

string s = obj["role"] as String;
Run Code Online (Sandbox Code Playgroud)

将设置snullif obj["role"]不是的实例string.请注意,对于as显式转换运算符,将被忽略.

如果obj["role"]既不是string具有显式强制转换操作符的类的实例也不是string,则必须说明

string s = obj["role"].ToString();
Run Code Online (Sandbox Code Playgroud)

但要小心,后者可以抛出一个NullReferenceException.

  • @Basiclife:如果`obj ["role"]`是`null`,那么`obj ["role"].ToString()`将抛出一个`NullReferenceException`,因为我们试图取消引用`null`引用. (7认同)