我希望有类似的东西:
var somevar;
if (cond)
{
var= something;
// a lot of code
}
else var = somethingElse;
然而,编译器尖叫认为应该在以这种方式使用var之前初始化var。怎么做。或者如何实现这种情况?
答案 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
}
如果someThing
和someThingElse
属于同一类型。我认为理解someVar的可能值更清楚,但是你测试cond两次。
答案 7 :(得分:0)
下面的文章详细介绍了如何使用var。
var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。推断类型可以是内置类型,匿名类型,用户定义类型或.NET Framework类库中定义的类型。
var只能在声明并初始化局部变量时使用 声明;该变量不能初始化为null,也不能初始化为方法组或匿名函数。
答案 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;