使用ReadLine读取未知行

时间:2017-02-02 19:57:59

标签: c#

我想将字符串(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

        }

我无法在这里找出问题。

3 个答案:

答案 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没有值时。此外,在让控制台接受输入的同时,该值不会保存在任何地方。

通过编辑,它需要两个输入而不是一个。