return(Type)实例或返回实例作为Type

Ber*_* IT 2 c# casting

(虚构)之间有什么区别:

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,第一种方法是否会引发异常?而第二个不?

Aas*_*set 8

没有; 两种方法都会成功,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.