重新分配弱类型变量转换

时间:2014-07-13 20:31:16

标签: c# .net variables type-inference dynamic-typing

鉴于在C#中我们可以使用弱类型var,它可以是任何类型,直到它设置,是否可以根据测试的输出具有相同的var变化类型?

例如

var c = DBQuery.FindString("paramater", "data");

如果查询不成功,则返回NULL,如果有效,则返回字符串。

从我所看到的情况来看,由于FindString有一个返回类型的字符串,var c被输入为字符串,尽管它是null。

有没有办法取消设置c的输入,以便可以将其用于

var c = DBQuery.FindInt("parameter", "data2");

由于

2 个答案:

答案 0 :(得分:2)

var关键字指示编译器从初始化语句右侧的表达式中推断变量的类型。

您可能正在寻找的关键字是dynamic。类型是静态类型,但动态类型的对象绕过静态类型检查。在大多数情况下,它的功能类似于它具有类型对象。在编译时,假定键入为动态的元素支持任何操作。

鉴于此示例

dynamic c = "foo";
Console.WriteLine(test.GetType());

c = 2;
Console.WriteLine(test.GetType());

<强>输出

  

System.String
  System.Int32

尽管如此,我建议您调整代码以避免dynamic类型,主要是因为您在编译时失去了检测错误的能力以及使用IntelliSense的能力。

其他资源

var关键字:http://msdn.microsoft.com/en-us/library/bb384061.aspx
dynamic关键字:http://msdn.microsoft.com/en-us/library/dd264736.aspx

答案 1 :(得分:1)

您已正确理解var关键字。在设置之前,它不是任何类型。它仍然是静态输入的。

这意味着:编译器将在分配的右侧找出表达式的类型,这将是变量的静态声明类型。

由于DBQuery.FindString被声明为返回string(无效或无效),因此声明100%相当于:

string c = DBQuery.FindString("parameter", "data");

C#中无法实现您的目标。您可以将变量声明为objectdynamic并且代码可以正常工作,但如果这样做,您将失去所有设计时帮助,例如IntelliSense(加上因铸造或动态而导致的运行时性能损失)打字)。