将C#中'var'的值初始化为null

时间:2013-07-02 04:52:43

标签: c# var

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

  

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

我怎么能实现这个目标?

2 个答案:

答案 0 :(得分:33)

var变量仍然具有类型 - 并且编译器错误消息表明必须在声明期间建立此类型

可以完成特定请求(分配初始空值),但我不推荐它。它在这里没有提供优势(因为仍然必须指定类型)并且可以将其视为使代码不易读取:

var x = (String)null;

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

String x = null;

编译器不会接受var x = null,因为它不会将null与任何类型相关联 - 甚至不是Object。使用上述方法,var x = (Object)null将“有效”,尽管它有用。但

通常,当我无法正确使用var的类型推断时

  1. 我所在的地方最好明确声明变量;或
  2. 我应该重写代码,以便在声明期间分配有效值(具有已建立的类型)。
  3. 第二种方法可以通过将代码转移到方法或函数中来完成。

答案 1 :(得分:1)

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

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

此外,上面的代码相当于:

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

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

var myVariable = (MyType)nullMyType myVariable = null应该有效,因为您提供了C#编译器上下文来确定myVariable应该是什么类型。

了解更多信息: