如何初始化var?

时间:2010-05-25 12:47:56

标签: c# initialization

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

11 个答案:

答案 0 :(得分:50)

C#是严格/强类型语言。 var是为anonymous types的编译时类型绑定引入的,但您可以将var用于在设计时已知的原始类型和自定义类型。在运行时,没有像var这样的东西,它被实际类型替换为参考类型或值类型。

当你说,

var x = null; 

编译器无法解析此问题,因为没有绑定到null的类型。你可以这样做。

string y = null;
var x = y;

这样可行,因为现在x可以在编译时知道它的类型,在这种情况下是字符串。

答案 1 :(得分:30)

为什么这不可能?

var theNameOfTheVar = (TheType)null;

例如:

var name = (string)null;

这很简单。

答案 2 :(得分:30)

嗯,正如其他人所说的,类型的模糊性是个问题。所以答案是否定的,C#不会让它发生,因为它是一种强类型语言,它只处理编译时已知的类型。编译器可能被设计为推断类型为object的类型,但设计者选择避免额外的复杂性(在C#null中没有类型)。

另一种选择是

var foo = new { }; //anonymous type

再次注意,您正在初始化为编译时已知类型,最后它不是null,而是匿名对象。它只比new object()短几行。 在这种情况下,您只能将匿名类型重新分配给foo,这可能是可取的,也可能是不合适的

如果类型未知,则初始化为null是不可能的。

除非您使用的是dynamic

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

当然,除非您想要将值重新分配给foo变量,否则它将毫无用处。您在Visual Studio中也失去了智能感知支持。

最后,正如其他人已经回答的那样,您可以通过强制转换声明特定类型;

var foo = (T)null;

所以你的选择是:

//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;

答案 3 :(得分:16)

这是如何初始化值 var变量

的方法
var _myVal = (dynamic)null; 

答案 4 :(得分:6)

var无法设置为null,因为它需要静态输入。

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。这不需要静态输入。

dynamic foo = null;
foo = "hi";

此外,由于我不清楚问题是否一般意味着var关键字或变量:只能将引用(对类)和可空类型设置为null。例如,您可以这样做:

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

但你不能这样做:

int i = null; // integers cannot contain null

答案 5 :(得分:4)

嗯,我认为你可以将它分配给一个新对象。类似的东西:

var v = new object();

答案 6 :(得分:3)

不。 var需要初始化为一个类型,它不能为空。

答案 7 :(得分:3)

var只是告诉编译器在编译时推断出你想要的类型......它无法从null推断出来(尽管有些情况下可以)。< / p>

所以,不允许你这样做。

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

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

然后是的,你可以这样做,但不是null

答案 8 :(得分:2)

您无法为var类型指定null。

如果指定null,则编译器无法在var位置找到您想要的变量。

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

你可以试试这个:

var dummy =(string)null;

这里编译器可以找到你想要的类型,所以没问题

您可以指定一些空值。

var dummy = string.Empty;

var dummy = 0;

答案 9 :(得分:0)

你不能用null初始化var,var需要初始化为一个类型,否则无法推断出来,如果你认为你需要这样做,也许你可以发布代码,很可能还有另一种方法可以做你在尝试什么。

答案 10 :(得分:0)

谢谢Mr.Snake,发现这对我正在寻找的另一个技巧很有帮助:)(没有足够的回复评论)

可空类型的简写分配。 像这样:

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