在将Activator.CreateInstance的结果转换为接口类型时,我在使用var关键字时遇到了一些问题。据我了解var,以下代码段对在var版本和显式类型版本之间几乎完全相同:
// Direct cast
var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType));
IThing thing = (IThing)Activator.CreateInstance(Type.GetType(thingType));
// Casting with as
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing;
IThing thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing;
我是否遗漏了可能改变Intellisense或运行时行为的微妙差异?
答案 0 :(得分:2)
没有区别。 “var
”关键字没有做任何神奇的事情,它使用编译时类型推断,类似于泛型的工作方式。
编译完成后,没有任何区别。您可以通过将鼠标悬停在正在使用它的变量名称(除了声明它的位置之外)来证明这一点。应弹出工具提示,显示类型。悬停在两个变量时应该具有相同的类型。
答案 1 :(得分:1)
在每种情况下,将var
或IThing
声明为同义词。
演员阵容与使用as
之间存在差异 - 如果该项目不是您要转换为的内容,后者将返回null
。
答案 2 :(得分:1)
没有区别。另外,我发现使用var
关键字时没有任何问题。
就可读性而言,查看以下代码行,您很容易看到Type
var
是var thing = (IThing)Activator.CreateInstance(Type.GetType(thingType));
var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing;
:
{{1}}
答案 3 :(得分:0)
var和IThing是相同的。你只需保存3次击键。