在if / else语句中定义变量时有没有办法使用var?

时间:2018-05-25 09:16:20

标签: c#

我尽可能使用var,因为它更容易不必明确定义变量。

但是当在 if switch 语句中定义变量时,我必须明确定义它。

string message;
//var message; <--- gives error
if (error)
{
    message = "there was an error";
}
else
{
    message = "no error";
}

Console.WriteLine(message);

即使在if或switch构造中定义变量,有没有办法使用 var

3 个答案:

答案 0 :(得分:8)

没有。不过,在这种情况下你可以使用条件:

var message = error ? "there was an error" : "no error";

但除此之外:不。您需要指定类型,或使用初始显式值。我建议反对后者,因为它删除了明确的分配检查。

答案 1 :(得分:5)

你不能,你可以通过查看documentation来确认:

  

以下限制适用于隐式类型变量   声明:

     

var只能在声明和初始化局部变量时使用   在同一声明中;变量无法初始化为null,或   方法组或匿名函数。

因此,要使用var,必须始终根据上述规则在同一语句中对其进行初始化。

将其初始化为某个default值并不具有与单位化变量相同的语义。例如:

string message;
if (error) {
    message = "there was an error";
}
else {
    // forgot to assign here
}
// Compiler error, use of potentially uninitialized variable
Console.WriteLine(message);

但是

var message = "";
if (error) {
    message = "there was an error";
}
else {
    // forgot to initialize
}
// all fine
Console.WriteLine(message);

所以,只需使用string message;

答案 2 :(得分:0)

在Python中你可以做到这一点:

if error:
    message = "there was an error";
else:
    message = "no error";

print(message);

甚至:

message = "there was an error" if error else "no error"

这是可能的,因为Python不要求你定义变量:第一次为变量赋值时,它会被创建,下次修改它。

然而,这不是C#的情况;正如您自己已经确认的那样,有各种警告不允许您像在Python中那样进行编码。首先,您需要定义要使用的每个变量(及其类型,但继续阅读),其次,有范围。在C#中,在if分支内创建的变量将不再存在于该分支的末尾。

好吧,那就是var。这是赋值运算符右侧值的类型的特殊快捷方式(&#34; =&#34;)。它并不意味着&#34;我稍后会告诉你变量的类型&#34;。这意味着&#34;变量的类型与我将其分配给的表达式相同。&#34;。换句话说,当您在定义变量的同时为变量赋值时,只能使用var

希望这有帮助。