C#对象是类型vs对象作为类型

时间:2014-09-04 11:14:24

标签: c# types casting resharper

if(someVar is MyClass)

Resharper建议将其替换为

var some = someVar as MyClass;
if(some!= null){ /*.......*/ }

有任何性能优势吗?我记得与拳击和拆箱变量有关的东西,但不确定,如果我在正确的道路上。或者Resharper只是建议正确的语法?

1 个答案:

答案 0 :(得分:1)

它表明这可能是因为前者需要两个演员:

if(someVar is MyClass) 
{
    var myVar = (MyClass) someVar;
}

is运算符在幕后执行转换并返回布尔值,无论是否允许。

如果你使用as,你几乎可以“缓存”结果,你只需要一次演员。

var myVar = someVar as MyClass
if(myVar != null)
{
    // No cast needed
}