如何初始化var?

我可以初始化var与null或一些空值?

C#是严格/强types的语言 。 var引入了匿名types的编译时types绑定,但是您可以将var用于devise时已知的基本types和自定义types。 在运行时没有什么像var,它被一个实际的typesreplace,这个types可以是一个引用types,也可以是一个值types。

当你说,

 var x = null; 

编译器不能解决这个问题,因为没有types绑定为null。 你可以这样做。

 string y = null; var x = y; 

这将工作,因为现在x可以在编译时知道它的types,在这种情况下是string。

为什么这不可能?

 var theNameOfTheVar = (TheType)null; 

例如:

 var name = (string)null; 

就那么简单。

那么,正如其他人所说,types的模糊是问题。 所以答案是否定的,C#不会让这种情况发生,因为它是一种强types语言,它只处理编译时间已知的types。 编译器可以被devise为将其推断为typesobject ,但是devise者select避免额外的复杂性(在C#中null没有types)。

另一种方法是

 var foo = new { }; //anonymous type 

再次注意,你正在初始化一个编译时间的已知types,最后它不是null ,而是匿名的对象。 它只比new object()less了几行。 在这种情况下,您只能将匿名types重新分配给foo ,这可能也可能不需要

初始化为nulltypes不知道是没有问题的。

除非你使用dynamic

 dynamic foo = null; //or var foo = (dynamic)null; //overkill 

当然,这是非常没用的,除非你想重新赋值给foovariables。 您在Visual Studio中也失去了智能感知支持。

最后,正如其他人所回答的,你可以有一个特定的types声明铸造;

 var foo = (T)null; 

所以你的select是:

 //initializes to non-null; I like it; cant be reassigned a value of any type var foo = new { }; //initializes to non-null; can be reassigned a value of any type var foo = new object(); //initializes to null; dangerous and finds least use; can be reassigned a value of any type dynamic foo = null; var foo = (dynamic)null; //initializes to null; more conventional; can be reassigned a value of any type object foo = null; //initializes to null; cannot be reassigned a value of any type var foo = (T)null; 

var只是告诉编译器在编译时推断你想要的types……它不能从null (尽pipe有可能的话 )推断出来。

所以,不,你不能这样做。

当你说“一些空的价值”…如果你的意思是:

 var s = string.Empty; // var s = ""; 

那么是的,你可以这样做,但不是null

不。 var需要被初始化为一个types,它不能为null。

那么,我认为你可以把它分配给一个新的对象。 就像是:

 var v = new object(); 

这是如何初始化 varvariables的 的方法

 var _myVal = (dynamic)null; 

var不能被设置为null因为它需要被静态types化。

 var foo = null; // compiler goes: "Huh, what's that type of foo?" 

但是,您可以使用此构造来解决该问题:

 var foo = (string)null; // compiler goes: "Ah, it's a string. Nice." 

我不知道,但从我听到你也可以使用dynamic而不是var 。 这不需要静态types。

 dynamic foo = null; foo = "hi"; 

另外,由于从这个问题我不清楚,如果你的意思是var关键字或一般variables:只有引用(类)和可空types可以设置为null。 例如,你可以这样做:

 string s = null; // reference SomeClass c = null; // reference int? i = null; // nullable 

但是你不能这样做:

 int i = null; // integers cannot contain null 

您不能将null分配给vartypes。

如果你赋值为null,那么编译器在var的地方找不到你想要的variables。

抛出错误: Cannot assign <null> to an implicitly-typed local variable

你可以试试这个:

 var dummy =(string)null; 

这里编译器可以find你想要的types,所以没有问题

您可以分配一些空的值。

 var dummy = string.Empty; 

要么

 var dummy = 0; 

你不能初始化var与空,var需要被初始化为一种types,否则它不能被推断,如果你认为你需要这样做,也许你可以发布的代码很可能有另一种方式来做你是什么尝试。

谢谢Mr.Snake,发现这个有用的另一个技巧,我正在寻找:)(没有足够的代表评论)

可空types的速记赋值。 喜欢这个:

 var someDate = !Convert.IsDBNull(dataRow["SomeDate"]) ? Convert.ToDateTime(dataRow["SomeDate"]) : (DateTime?) null;