猿问

直接演员与“作为”操作者?

直接演员与“作为”操作者?

考虑以下代码:

void Handler(object o, EventArgs e){
   // I swear o is a string
   string s = (string)o; // 1
   //-OR-
   string s = o as string; // 2
   // -OR-
   string s = o.ToString(); // 3}

这三种铸造的区别是什么(好的,第三种不是铸造,但你得到了意图)。哪一种是最好的呢?


慕沐林林
浏览 300回答 3
3回答

叮当猫咪

这取决于你是否知道o是一根绳子,你想用它做什么。如果你的评论意味着o真的是一根绳子,我更喜欢直的(string)o演员-不太可能失败。使用直接转换的最大优点是,当它失败时,您将得到一个InvalidCastException这很大程度上告诉了你出了什么问题。带着as操作员,如果o不是一根绳子,s设置为null,如果您不确定并且想要测试的话,这是很方便的。s:string s = o as string;if ( s == null ){     // well that's not good!     gotoPlanB();}但是,如果不执行该测试,则将使用s晚些时候有一个NullReferenceException扔。它们更常见,而且罗得一旦它们在野外发生,很难追踪,因为几乎每一行都会删除一个变量,并可能抛出一个变量。另一方面,如果您试图转换为值类型(任何原语或结构,如日期时间),你必须使用直石膏-as不管用。在转换为字符串的特殊情况下,每个对象都有一个ToString,那么您的第三种方法可能还可以,如果o不为空,而您认为ToString方法可能会做您想做的事。
随时随地看视频慕课网APP
我要回答