【问题标题】:Trying to create a random name generator and i get a unassigned local variable [duplicate]尝试创建一个随机名称生成器,我得到一个未分配的局部变量 [重复]
【发布时间】:2017-11-08 05:50:13
【问题描述】:

如果有人能指出我哪里错了。

public string GenerateName(char gender)
    {
        string name;
        Random rand = new Random();


        if (gender == 'm')
        {

            string[] maleNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedMalesNamesList.txt");
            string[] lastNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedLastNamesList.txt");
            name = maleNames[rand.Next(0, maleNames.Length - 1)] + " " + lastNames[rand.Next(0, lastNames.Length - 1)];

            return name;
        }
        else
        {

        }
        return name;
    }

编译器说未分配的局部变量。 提前致谢

【问题讨论】:

  • 性别不是'm'会怎样?
  • 对不起,它不完整的m是男性的缩写,当它不是m时它会生成一个女性名字。
  • @Ken 的评论向您暗示了错误消息的原因。编译器非常坦率地告诉您,即使您返回它的值,该方法也会导致未分配 name 变量的执行路径。当gender 变量不等于'm' 时,您认为应该返回什么值?
  • 当我添加 else 路径时,它仍然显示之前的错误。当我设置字符串名称 = string.Empty;它解决了这个问题。

标签: c# io


【解决方案1】:

尝试编辑这个:

从这里:

string name;

到这里:

string name = string.Empty;

你不能使用字符串name,除非你用值初始化它。

为了更详细地解释错误,您不能只声明一个字符串并在没有任何值的情况下返回它。由于字符串是引用类型,因此需要将其初始化为 null、空或任何字符值的集合。

在这种情况下,在您的 if 和 else 语句中,else 语句中没有 name 的值,因此编译器会告诉您错误,因为它检测到“if 条件可能失败”并且它将转到 else 语句,然后返回 name 变量。

如果是这样的话,如果name 不进入if 语句,它的值是多少?编译器很聪明,可以检测到这一点。你也可以这样做:

    string name;
    Random rand = new Random();
    if (gender == 'm')
    {
        string[] maleNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedMalesNamesList.txt");
        string[] lastNames = File.ReadAllLines(Directory.GetCurrentDirectory() + @"\ModifiedLastNamesList.txt");
        name = maleNames[rand.Next(0, maleNames.Length - 1)] + " " + lastNames[rand.Next(0, lastNames.Length - 1)];

        return name;
    }
    else
    {
        name = "";
    }
    return name;

在这种情况下,您涵盖所有理由,并且可以安全地返回带有值的字符串 name,这样就不会触发错误。

【讨论】:

  • 谢谢,这似乎有效,您能解释一下为什么 string.Empty 能够解决问题吗?这真的很有帮助,所以我知道问题出在哪里,所以我不会重复它
  • 我用进一步的解释编辑了我的答案。 @DarkxDivinityX
猜你喜欢
  • 1970-01-01
  • 2018-07-25
  • 2011-07-19
  • 1970-01-01
  • 2021-08-01
  • 2022-10-18
  • 2012-06-19
  • 2019-03-31
  • 1970-01-01
相关资源
最近更新 更多