gpt4 book ai didi

c# - 对分配的字符串使用未分配的局部变量错误

转载 作者:行者123 更新时间:2023-11-30 21:51:21 26 4
gpt4 key购买 nike

所以,我是 C# 的初学者,我真的不知道为什么我会收到变量“name”的“使用未分配的局部变量错误”。我有这个简单的代码,它要求输入姓名,如果不是 Bob 或 Alice,它会显示一条消息。

using System;

namespace exercise2
{
class Program
{
static void Main(string[] args)
{
string name;
int i = 0;
while (i == 0)
{
Console.Write("What is your name?\n>>> ");
name = Console.ReadLine();
if ((name == "Alice") || (name == "Bob"))
{
i = 1;
Console.Clear();
}
else
{

Console.WriteLine("You're not Alice or Bob.");
Console.ReadKey();
i = 0;
Console.Clear();
}

}
Console.WriteLine("Good Morning, " + name); //"name" is unassigned
Console.ReadKey();
}
}
}

希望这不是一个愚蠢的问题。

谢谢

最佳答案

这是因为编译器无法“看到”对 while() 语句的评估肯定是 true 并且 name 将在while 第一次阻塞。

改变你的

string name;

进入

string name = ""; //or string.Empty

虽然作为人类我们可以很容易地读到 while block 将第一次执行:

string name; //unassigned
int i = 0;
while (i == 0) //will enter
{
Console.Write("What is your name?\n>>> ");
name = Console.ReadLine(); //name will definitely be assigned here
... something else
}
Console.WriteLine("Good Morning, " + name); //compiler cannot "see" that the while loop will definitely be entered and name will be assigned. Therefore, "name" is unassigned

编译器看不到,因此给您错误。

或者,您也可以将 while block 更改为 do-while 以强制编译器看到 name 将被分配(归功于 Lee ):

string name; //unassigned
int i = 0;
do //will enter
{
Console.Write("What is your name?\n>>> ");
name = Console.ReadLine(); //name will definitely be assigned here
... something else
} while (i == 0);
Console.WriteLine("Good Morning, " + name); //should be OK now

关于c# - 对分配的字符串使用未分配的局部变量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35729910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com