Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于var关键字用法的问题_C#_.net - Fatal编程技术网

C# 关于var关键字用法的问题

C# 关于var关键字用法的问题,c#,.net,C#,.net,我想要一些像: var somevar; if (cond) { var= something; // a lot of code } else var = somethingElse; 然而,编译器强烈要求在以这种方式使用变量之前,应该对其进行初始化。怎么做。或者如何实现这种情况?你不能。使用var时,必须初始化声明中的变量……否则编译器无法知道使用哪种类型 使用var定义的变量仍然是静态类型的…编译器只是根据声明中的赋值推断类型。如果您正在查找动态键入的内容,如果您使用的是.NET

我想要一些像:

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

然而,编译器强烈要求在以这种方式使用变量之前,应该对其进行初始化。怎么做。或者如何实现这种情况?

你不能。使用var时,必须初始化声明中的变量……否则编译器无法知道使用哪种类型

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

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

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

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

或者不要使用
var
,而是使用两个表达式稍后将指定的类型。

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

在这种情况下不要使用var。编译器判断变量类型的方法是分析右边的变量。如果你没有在右边给它任何东西,编译器就没有办法找到它。

当使用
var
声明变量时,你必须立即给它赋值,这样编译器才能知道它的类型

尽管您可以制作一个足够聪明的编译器来找到第一个用法,但C#编译器并不理解这段代码

您可以使用:

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

如果
某物
某物
属于同一类型。我认为这对于理解someVar的可能值更为清晰,但是您需要测试cond两次

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

var somevar = "";

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

我想这就是你想要的:

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

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

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

仅当局部变量在同一时间声明和初始化时,才能使用var 陈述无法将变量初始化为null、方法组或匿名函数


您可以使用object关键字,但在取消绑定时仍需要知道它是什么类型,因此,如果在前面所述的声明时指定var,则最好使用var

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

如果“something”和“somethingElse”属于同一类型,则将somevar初始化为该类型的默认值

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

你的意思是做
var=something或者应该是
var-somevar=something
Elena,看一看:我不同意对象而不是var“solution”。后来你需要将somevar强制转换为something和somethingElse的公共类型,因此你失去了与显式类型相关联的编译时检查和var关键字的简洁性。如果条件的两个值不是相同的基类型,无论如何,代码可能有问题。