初始化';var';在C#中为null

本文关键字:中为 null var 初始化 | 更新日期: 2023-09-27 18:20:44

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

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

我怎样才能做到这一点?

初始化';var';在C#中为null

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

特定的请求(分配一个初始null值)可以完成,但我不建议这样做。它在这里没有提供优势(因为类型仍然必须指定),并且可以被视为使代码可读性降低:

var x = (String)null;

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

String x = null;

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

一般来说,当我不能正确使用var的类型推理时,那么

  1. 我所处的位置最好是显式地声明变量;或
  2. 我应该重写代码,以便在声明期间分配有效的值(具有已建立的类型)

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

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应该是什么类型

更多信息:

  • 如何初始化var
  • http://msdn.microsoft.com/en-us/library/bb397696.aspx