重新赋值弱类型变量强制转换

本文关键字:类型变量 转换 新赋值 赋值 | 更新日期: 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.aspx
dynamic关键字:http://msdn.microsoft.com/en-us/library/dd264736.aspx

您对var关键字理解错误。它不是任何类型,直到它被设置为。它仍然是静态类型的

这意味着:编译器将计算出赋值右侧表达式的类型,这将是变量的静态声明类型。

由于DBQuery.FindString被声明为返回string (null或not),因此声明100%等价于:

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

你想做的在c#中是不可能的。您可以将变量声明为objectdynamic,代码将正常工作,但是如果您这样做,您将失去所有设计时的帮助,例如IntelliSense(加上由于强制类型转换或动态类型而导致的运行时性能下降)。