17

我想将一个变量分配给一个初始值为null,并在下一个if-else块中分配它的值,但是编译器给出了一个错误,

必须初始化隐式类型的局部变量。

我怎么能做到这一点?

4

2 回答 2

37

var变量仍然有一个类型 - 并且编译器错误消息说这个类型必须在声明期间建立

具体请求(赋初始空值)可以做,但我不推荐。它在这里没有提供优势(因为仍然必须指定类型)并且它可以被视为降低代码的可读性:

var x = (String)null;

这仍然是“类型推断”,相当于:

String x = null;

编译器不会接受var x = null,因为它不会将 null 与任何类型相关联——甚至不是 Object。使用上述方法,var x = (Object)null会“工作”,尽管它的用处值得怀疑。

一般来说,当我不能var正确使用 's 类型推断时

  1. 我在一个最好明确声明变量的地方;或者
  2. 我应该重写代码,以便在声明期间分配一个有效值(具有已建立的类型)。

第二种方法可以通过将代码移动到方法或函数中来完成。

于 2013-07-02T04:57:19.690 回答
1

C# 中的var关键字的主要好处是增强可读性,而不是功能。从技术上讲,var关键字允许一些其他解锁(例如使用匿名对象),但这似乎超出了这个问题的范围。每个用var关键字声明的变量都有一个类型。例如,您会发现以下代码输出“String”。

var myString = "";
Console.Write(myString.GetType().Name);

此外,上面的代码等价于:

String myString = "";
Console.Write(myString.GetType().Name);

关键字只是 C#的var一种说法,即“我可以从上下文中找出类型myString,所以不用担心指定类型。”

var myVariable = (MyType)null或者MyType myVariable = null应该可以工作,因为您正在提供 C# 编译器上下文来确定myVariable应该是什么类型。

了解更多信息:

于 2013-07-02T04:57:35.160 回答