鉴于在C#中我们可以使用弱类型var,它可以是任何类型,直到它设置,是否可以根据测试的输出具有相同的var变化类型?
例如
var c = DBQuery.FindString("paramater", "data");
如果查询不成功,则返回NULL,如果有效,则返回字符串。
从我所看到的情况来看,由于FindString有一个返回类型的字符串,var c被输入为字符串,尽管它是null。
有没有办法取消设置c的输入,以便可以将其用于
var c = DBQuery.FindInt("parameter", "data2");
由于
答案 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#中无法实现您的目标。您可以将变量声明为object
或dynamic
并且代码可以正常工作,但如果这样做,您将失去所有设计时帮助,例如IntelliSense(加上因铸造或动态而导致的运行时性能损失)打字)。