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

C#对象为类型vs对象为类型,c#,types,casting,resharper,C#,Types,Casting,Resharper,Resharper建议将其替换为 if(someVar is MyClass) 有什么性能优势吗?我记得一些与装箱和拆箱变量有关的事情,但不确定我是否走在正确的道路上。还是Resharper只是建议使用正确的语法?它建议这样做的原因可能是因为前者需要两次强制转换: var some = someVar as MyClass; if(some!= null){ /*.......*/ } is操作符在幕后执行强制转换,并返回一个布尔值,无论是否允许 但是,如果您将用作,您几乎可以“缓存”结果,

Resharper建议将其替换为

if(someVar is MyClass)

有什么性能优势吗?我记得一些与装箱和拆箱变量有关的事情,但不确定我是否走在正确的道路上。还是Resharper只是建议使用正确的语法?

它建议这样做的原因可能是因为前者需要两次强制转换:

var some = someVar as MyClass;
if(some!= null){ /*.......*/ }
is
操作符在幕后执行强制转换,并返回一个布尔值,无论是否允许

但是,如果您将
用作
,您几乎可以“缓存”结果,并且只需要进行一次强制转换

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