代码之家  ›  专栏  ›  技术社区  ›  Edward Tanguay

在if/else语句中定义变量时,是否有使用var的方法?

c#
  •  7
  • Edward Tanguay  · 技术社区  · 7 年前

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

    但当变量在 如果 转换 语句,我必须明确定义它。

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

    有使用方法吗 var 即使变量是在if或switch构造中定义的?

    3 回复  |  直到 7 年前
        1
  •  5
  •   Evk    7 年前

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

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

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

    所以要使用 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
  •  8
  •   Marc Gravell    7 年前

    不。在这种情况下,您可以使用条件,但是:

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

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

        3
  •  0
  •   Baltasarq    7 年前

    在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 。这是赋值运算符(“=”)右侧值类型的特殊快捷方式。这并不意味着“我稍后会告诉你变量的类型”。它的意思是“变量的类型与我分配给它的表达式相同”。换句话说,您只能使用 var 当您在定义变量的同时为变量赋值时。

    希望这有帮助。