关于var关键字用法的问题

时间:2010-12-17 15:00:43

标签: c# .net

我希望有类似的东西:

var somevar;
if (cond)
{
  var= something;
  // a lot of code
}
else var = somethingElse;

然而,编译器尖叫认为应该在以这种方式使用var之前初始化var。怎么做。或者如何实现这种情况?

10 个答案:

答案 0 :(得分:8)

你做不到。使用var时,必须在声明中初始化变量...否则编译器无法知道要使用哪种类型。

使用var定义的变量仍然是静态类型的...编译器只根据声明中的赋值推断出类型。如果您正在寻找动态类型的内容,如果您使用的是.NET 4.0,则可以尝试dynamic类型。

在您的情况下,您需要在声明时指定类型。

答案 1 :(得分:3)

正如其他人所提到的,var仍然是静态类型,它只是意味着编译器在编译时推断出该类型,不是运行时

我认为这就是你想要的:

object somevar;
if (cond)
{
  somevar = something;
  // a lot of code
}
else somevar = somethingElse;

答案 2 :(得分:2)

“var”只是指示编译器派生确切类型的一种方法。但要实现这一点,您需要使用返回该类型的表达式对其进行初始化。

或者不要使用var,而是使用您知道两种表达式稍后将分配的类型。

答案 3 :(得分:2)

如果条件的两个值都是相同的类型,比如string,请执行以下操作:

var somevar = "";

初始化它。

答案 4 :(得分:1)

您使用关键字var作为变量。在示例中将var替换为somevar。

答案 5 :(得分:1)

在这种情况下不要使用var。编译器确定变量的类型的方式是分析右侧的内容。如果你没有在右侧给它任何东西,那么编译器就无法弄明白。

答案 6 :(得分:1)

使用var声明变量时,必须立即为其赋值,以便编译器知道其类型。

虽然您可以使编译器足够智能以找到第一个用法,但C#编译器不理解此代码。

您可以使用:

var someVar = cond ? someThing : someThingElse;
if (cond) {
   // A lot of code
}

如果someThingsomeThingElse属于同一类型。我认为理解someVar的可能值更清楚,但是你测试cond两次。

答案 7 :(得分:0)

下面的文章详细介绍了如何使用var。

  

var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型,匿名类型,用户定义类型或.NET Framework类库中定义的类型。

     

var只能在声明并初始化局部变量时使用   声明;该变量不能初始化为null,也不能初始化为方法组或匿名函数。

Implicitly Typed Local Variables (C# Programming Guide)

答案 8 :(得分:0)

你可以使用object关键字,但是你仍然需要知道拆箱时它是什么类型,所以如果在之前声明的时间分配var,那么var是个更好的主意。

object a = something;
SomeCustomObject b = (SomeCustomObject)a;

答案 9 :(得分:0)

如果'something'和'somethingElse'属于同一类型,请将somevar初始化为该类型的默认值。

var somevar = default(TYPE GOES HERE);
if (cond)
{
  somevar = something;
  // a lot of code
}
else somevar = somethingElse;