我尽可能使用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 ?
答案 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
。
希望这有帮助。