(虚构)之间有什么区别:
public Test GetTest()
{
Object obj = new Test();
return (Test)obj;
}
Run Code Online (Sandbox Code Playgroud)
和
public Test GetTest()
{
Object obj = new Test();
return obj as Test;
}
Run Code Online (Sandbox Code Playgroud)
如果obj == null,第一种方法是否会引发异常?而第二个不?
没有; 两种方法都会成功,null如果obj是,则返回null.不同之处在于如果obj不是以下实例会发生什么Test:第一种方法会抛出异常,而第二种方法会成功并返回null.
换句话说:如果你知道你的对象是a Test或者你不知道它是什么,那么使用第一种方法,但如果它不是a,你想要一个例外Test.如果你不知道你的对象是什么,请使用第二种方法,但null如果它不是,那么你只想要和平Test.as如果类型检查成功,您还可以使用类型检查,如果您打算做一些特殊的事情:
var t = obj as Test;
if (t != null) {
...
}
Run Code Online (Sandbox Code Playgroud)
代替:
if (obj is Test) {
var t = (Test)obj;
...
}
Run Code Online (Sandbox Code Playgroud)
这样,您不需要重复类型名称,尽管第二种形式可能更清晰,并且避免泄漏t到范围的其余部分.
另外,请参阅@ il_guru的帖子,了解与之相关的一些其他警告as.
| 归档时间: |
|
| 查看次数: |
78 次 |
| 最近记录: |