Coo*_*per 3 .net c# xna casting type-conversion
我理解通过使用as运算符来转换对象,通过显式转换,通常是更理想的,因为如果转换失败,引用变量将变为null而不是抛出异常.
但是,假设我在使用as运算符之前检查一个对象所在的类的类型,它是在List内部,就像这样,
DrawableGameComponent drawComponent;
foreach (component in Components)
{
if (component is DrawableGameComponent)
{
drawComponent = component as DrawableGameComponent;
// do something with drawComponent
}
}
Run Code Online (Sandbox Code Playgroud)
使用as操作员是否通过is首先与操作员核实失去了它的好处?所以做下面的演员也同样好,因为我们is在尝试演员之前首先检查类类型?
if (component is DrawableGameComponent)
{
((DrawableGameComponent)componet).Visible = true;
}
Run Code Online (Sandbox Code Playgroud)
我只是想知道是否有一些我缺少的基础部分,或者这是否真的归结为品味使用的模式.后一种模式是否通过显式转换创建了垃圾?
提前致谢!
Yah*_*hia 11
更好(保存一个"演员" - 比较生成的IL):
DrawableGameComponent drawComponent;
foreach (component in Components)
{
drawComponent = component as DrawableGameComponent;
if (drawComponent != null)
{
// do something with drawComponent
}
}
Run Code Online (Sandbox Code Playgroud)
你使用as运算符检查类两次,虽然我怀疑除非在真正大规模的循环中,否则开销会很明显.
我更喜欢使用as和测试null并且还清理你的声明甚至更少的行:
foreach (component in Components)
{
var drawComponent = component as DrawableGameComponent;
if (drawComponent != null)
{
// do something with drawComponent
}
}
Run Code Online (Sandbox Code Playgroud)