列表只返回第一个值

Van*_*ton 1 c#

我有一个简单的程序,我可以在其中输入姓名,一旦按下 Enter 键,我就会得到输入的姓名。

var names = new List<string>();

while (true)
{
    Console.WriteLine("enter name");
    var input = Console.ReadLine();
    if (String.IsNullOrEmpty(input)) 
       break;
    names.Add(input);
}

if (names.Count == 2)
{
    Console.WriteLine(names[0], names[1] + "likes your post");
}
else if (names.Count > 2 )
{
    var number = names.Count;
    Console.WriteLine(names[0], names[1], number + "likes your post");
}
else if (names.Count == 1)
{
    Console.WriteLine(names[0] + "likes your post");
}
else
{
    Console.WriteLine("nobody likes your post");
}
Run Code Online (Sandbox Code Playgroud)

但是,我一直只返回名字,甚至不返回“喜欢你的帖子”部分。我试图调试它,我总是在列表中看到正确数量的项目,但仍然是错误的。

你能指出这个问题吗?

dcp*_*dcp 6

像这样尝试:

Console.WriteLine(names[0] + names[1] + "likes your post");
Run Code Online (Sandbox Code Playgroud)

解释:

按照您之前的方式,您(无意中)指定了一个格式字符串(例如names[0]),这不是您想要的。

你有过:

Console.WriteLine(names[0], names[1] + "likes your post");
Run Code Online (Sandbox Code Playgroud)

所以在上面的代码中,names[0]是格式字符串,names[1] + "likes your post"是格式字符串中使用的参数。但是names[0]没有任何占位符值(例如{0}, {1},等)所以没有什么会被替换到格式字符串中。所以结果是它会names[0]自己打印。

这是一个更具体的例子:

string value1 = "Val1";
string value2 = "Val2";
string value3 = "Val3";
Console.WriteLine("{0}, {1}, {2}", value1, value2, value3);
Run Code Online (Sandbox Code Playgroud)

"{0}, {1}, {2}"是格式字符串,和所述{0}装置,这是“与格式字符串之后的第一个参数替换该值”value1在这个例子中。的{1}手段,这是“与格式字符串之后的第二个参数替换该值”value2在这个例子中。

通过修复,我们只是完全删除了格式字符串并为 提供了一个参数Console.WriteLine,因此它只是逐字打印文本。