使用Activator.CreateInstance的var关键字?

时间:2009-06-19 13:47:02

标签: c#

在将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或运行时行为的微妙差异?

4 个答案:

答案 0 :(得分:2)

没有区别。 “var”关键字没有做任何神奇的事情,它使用编译时类型推断,类似于泛型的工作方式。

编译完成后,没有任何区别。您可以通过将鼠标悬停在正在使用它的变量名称(除了声明它的位置之外)来证明这一点。应弹出工具提示,显示类型。悬停在两个变量时应该具有相同的类型。

答案 1 :(得分:1)

在每种情况下,将varIThing声明为同义词。

演员阵容与使用as之间存在差异 - 如果该项目不是您要转换为的内容,后者将返回null

答案 2 :(得分:1)

没有区别。另外,我发现使用var关键字时没有任何问题。

就可读性而言,查看以下代码行,您很容易看到Type varvar thing = (IThing)Activator.CreateInstance(Type.GetType(thingType)); var thing = Activator.CreateInstance(Type.GetType(thingType)) as IThing;

{{1}}

答案 3 :(得分:0)

var和IThing是相同的。你只需保存3次击键。