我想将字符串(abc,def,ghi)添加到字符串类型列表
中 List<string> names = new List<string>();
读取未知行数,直到用户输入Enterkey
所有字符串都会添加到列表中 当我使用一个字符串(在下面的例子中的行)并为它分配Console.ReadLine()的输出并检查它是否为空
string line;
while ((!string.IsNullOrEmpty(line =Console.ReadLine())))
{
names.Add(line); //This works abc, def,ghi are added to the list
}
但是当我直接比较Console.ReadLine()的输出时,这不起作用
while ((!string.IsNullOrEmpty(Console.ReadLine())))
{
names.Add(Console.ReadLine()); //only def is added to the list
}
我无法在这里找出问题。
答案 0 :(得分:1)
为什么不是break
的简单无限循环:
List<string> names = new List<string>();
while (true) {
string line = Console.ReadLine();
if (string.IsNullOrEmpty(line)) // break on Enter - i.e. on empty line
break;
names.Add(line); // otherwise add into the list
}
答案 1 :(得分:1)
考虑Console.ReadLine()
的作用以及循环的工作原理:
while ((!string.IsNullOrEmpty(Console.ReadLine()))) // read abc, but don't do anything with it
{
names.Add(Console.ReadLine()); // read def, add it to the list
}
你的循环基本上是跳过每一行输入,因为循环的每次迭代读取两行输入行,但只将一行添加到列表中。这正是人们将该输入存储在变量中的原因:
string input = Console.ReadLine();
while (!string.IsNullOrEmpty(input))
{
names.Add(input);
input = Console.ReadLine();
}
(或者,如果你愿意的话,你发布的原始例子。虽然我个人觉得在这样的操作中变量分配令人反感,但这是个人偏好的问题。)
答案 2 :(得分:0)
在第二个示例中,您仍然使用names.Add(line)当line没有值时。此外,在让控制台接受输入的同时,该值不会保存在任何地方。
通过编辑,它需要两个输入而不是一个。