【问题标题】:Error: Use of unassigned local variable 'test' [duplicate]错误:使用未分配的局部变量“test”[重复]
【发布时间】:2014-10-09 22:34:47
【问题描述】:

这里有什么遗漏吗?

private int existb1b2(Bill b1, ArtQty artQty)
        {
            int test;
            for(int i = 0; i < b1.ArtQty.Count(); i++)
            {
                if (b1.ArtQty[i].Article.Name == artQty.Article.Name)
                    test = 0;
                else
                    test = -1;
            }
            return test;
        }

我收到了Error: Use of unassigned local variable 'test'

我认为应该初始化test

【问题讨论】:

  • 你在该函数的任何地方都没有return 语句
  • 另外,当你有比赛时,你应该 break 退出循环。
  • 当我使用return test时,它显示(local variable) int test
  • 并使用C#风格命名,如DoesBillExistInArray。并且永远不要使用一个字母的变量名。并使用布尔值。
  • @Laidback:如果您的代码现在有不同的错误,那么您现在有不同的问题。像这样编辑它是不好的形式。

标签: c# variables for-loop


【解决方案1】:

您有几个问题 - 首先,您需要为 test 分配一个初始化值,因为无法保证您甚至会进入 for 循环。这是您的错误的根源。

其次,如果您有匹配项,您可能希望返回 0 - 编写代码的方式,即使找到匹配项,它实际上也会返回 -1,除非列表中的最后一项是匹配项。您最好在找到匹配项时直接返回,无需迭代其余项目,甚至不需要局部变量分配。

试试这个:

private int existb1b2(Bill b1, ArtQty artQty)
{
    for (int i = 0; i < b1.ArtQty.Count(); i++)
    {
        if (b1.ArtQty[i].Article.Name == artQty.Article.Name) return 0;
    }
    return -1;
}

或者,如果您只是想修复编译错误,可以将 int test; 行更改为 int test = -1;

【讨论】:

  • 其他可能的改进:在大多数语言中,1 为真,0 为假。此代码使用这两个值的非常不寻常的表示形式,将每个值都减去 1。但是,在 C# 中,您最好使用 bool 而不是 int。
  • 同意,bool 会更好。
  • 如果我想退仓怎么办?当我制作 return i! 时,它显示相同的错误
  • 提出一个新问题并显示您的代码。要返回找到的项目的位置,你不会只使用return i吗?
猜你喜欢
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多