【问题标题】:C# object is type vs object as type [duplicate]C#对象是类型vs对象作为类型[重复]
【发布时间】:2014-09-04 11:14:24
【问题描述】:
if(someVar is MyClass)
Resharper 建议将其替换为
var some = someVar as MyClass;
if(some!= null){ /*.......*/ }
有什么性能优势吗?我记得一些与装箱和拆箱变量有关的东西,但不确定我是否走在正确的道路上。还是 Resharper 只是建议正确的语法?
【问题讨论】:
标签:
c#
types
casting
resharper
【解决方案1】:
它建议这样做的原因可能是因为前者需要两次强制转换:
if(someVar is MyClass)
{
var myVar = (MyClass) someVar;
}
is 运算符在幕后进行转换并返回一个布尔值(无论是否允许)。
如果你使用as,你几乎可以“缓存”结果,你只需要一次强制转换。
var myVar = someVar as MyClass
if(myVar != null)
{
// No cast needed
}