重新赋值弱类型变量强制转换
本文关键字:类型变量 转换 新赋值 赋值 | 更新日期: 2023-09-27 18:12:48
考虑到在c#中我们可以有弱类型var,它可以是任何类型,直到它被设置,是否有可能有相同的var改变类型取决于测试的输出?
例如var c = DBQuery.FindString("paramater", "data");
如果查询不成功,this将返回NULL;如果查询成功,则返回字符串。
从我所看到的,作为FindString是字符串的返回类型,var c被类型为字符串,尽管它是空的。
是否有一种方法可以取消c的类型设置,以便它可以用于
var c = DBQuery.FindInt("parameter", "data2");
谢谢
var
关键字指示编译器从初始化语句右侧的表达式推断出变量的类型。
您可能正在寻找的关键字是dynamic
。类型是静态类型,但是动态类型的对象绕过静态类型检查。在大多数情况下,它的功能就像它具有对象类型一样。在编译时,假定类型为dynamic的元素支持任何操作。
给定这个例子
dynamic c = "foo";
Console.WriteLine(test.GetType());
c = 2;
Console.WriteLine(test.GetType());
系统。字符串
系统。Int32
然而,我建议你调整你的代码以避免dynamic
类型,主要是因为你失去了在编译时检测错误的能力和使用智能感知的能力。
额外资源
var
关键字:http://msdn.microsoft.com/en-us/library/bb384061.aspxdynamic
关键字:http://msdn.microsoft.com/en-us/library/dd264736.aspx
您对var
关键字理解错误。它不是任何类型,直到它被设置为。它仍然是静态类型的
这意味着:编译器将计算出赋值右侧表达式的类型,这将是变量的静态声明类型。
由于DBQuery.FindString
被声明为返回string
(null或not),因此声明100%等价于:
string c = DBQuery.FindString("parameter", "data");
你想做的在c#中是不可能的。您可以将变量声明为object
或dynamic
,代码将正常工作,但是如果您这样做,您将失去所有设计时的帮助,例如IntelliSense(加上由于强制类型转换或动态类型而导致的运行时性能下降)。