当前位置:  开发笔记 > 编程语言 > 正文

未分配的局部变量和短路评估

如何解决《未分配的局部变量和短路评估》经验,为你挑选了0个好方法。

我有两种方法,它们都正确编译:

public int A()
{
    int i;
    if(!int.TryParse("0", out i))
    {
        return -1;
    }
    // do sth
    return i;
}

public int B()
{
    int i;
    if(true)
    {
        return -1;
    }
    return i;
}

在第二种情况(方法B)中,编译器足够聪明,可以检测到该变量i从未被使用过,所以它不会抱怨不分配它.

但是,我有另一个例子(两者的组合)似乎等同于方法B:

public int C()
{
    int i;
    if (true || !int.TryParse("0", out i))
    {
        return -1;
    }
    return i;
}

VisualStudio 2012(.NET Framework 4.6.01055)下在Windows上进行编译时,会抛出错误:Use of unassigned local variable 'i'.解决方案是:

i用任何值初始化,或

使用|运算符代替||.

为什么会这样?看起来编译器具有检测无法访问代码的所有必要数据.

附注:示例在单声道4.6.2下的Linux上进行C编译,并提供有关无法访问的代码的警告.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有