C# 列表仅返回第一个值
我有一个简单的程序,我输入名字,一旦我按下回车键,我应该得到输入的名字C# 列表仅返回第一个值,c#,C#,我有一个简单的程序,我输入名字,一旦我按下回车键,我应该得到输入的名字 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.
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");
}
然而,我一直只得到第一个名字,甚至不喜欢你的帖子部分。我试着调试它,我总是在列表中看到正确数量的项目,但仍然是错误的
你能指出问题所在吗?试着这样做:
Console.WriteLine(names[0] + names[1] + "likes your post");
Console.WriteLine(names[0] + names[1] + "likes your post") ;
说明:
按照以前的方式,您无意中指定了一个格式字符串,例如名称[0],这不是您想要的
你有:
Console.WriteLine(names[0], names[1] + "likes your post");
因此,在上面的代码中,名称[0]是格式字符串,名称[1]+是格式字符串中使用的参数。但是名称[0]没有任何占位符值,例如{0}、{1},等等。因此格式字符串中不会替换任何内容。因此,结果是它只会自己打印名称[0]
这里有一个更具体的例子:
string value1 = "Val1";
string value2 = "Val2";
string value3 = "Val3";
Console.WriteLine("{0}, {1}, {2}", value1, value2, value3);
{0}、{1}、{2}是格式字符串,{0}意味着用格式字符串后面的第一个参数替换该值,在本例中为值1。{1}表示用格式字符串后的第二个参数替换该值,在本例中为值2
在修复过程中,我们完全删除了格式字符串,并为Console.WriteLine提供了一个参数,因此它只需逐字打印文本。尝试如下操作:
Console.WriteLine(names[0] + names[1] + "likes your post");
Console.WriteLine(names[0] + names[1] + "likes your post") ;
说明:
按照以前的方式,您无意中指定了一个格式字符串,例如名称[0],这不是您想要的
你有:
Console.WriteLine(names[0], names[1] + "likes your post");
因此,在上面的代码中,名称[0]是格式字符串,名称[1]+是格式字符串中使用的参数。但是名称[0]没有任何占位符值,例如{0}、{1},等等。因此格式字符串中不会替换任何内容。因此,结果是它只会自己打印名称[0]
这里有一个更具体的例子:
string value1 = "Val1";
string value2 = "Val2";
string value3 = "Val3";
Console.WriteLine("{0}, {1}, {2}", value1, value2, value3);
{0}、{1}、{2}是格式字符串,{0}意味着用格式字符串后面的第一个参数替换该值,在本例中为值1。{1}表示用格式字符串后的第二个参数替换该值,在本例中为值2
在修复过程中,我们只是完全删除了格式字符串,并为Console.WriteLine提供了一个参数,因此它只是逐字打印文本。您正在使用的,它接受字符串和名称为[0]的参数作为格式字符串
尝试以下方式连接值:
Console.WriteLine(names[0] + names[1] + "likes your post");
Console.WriteLine(names[0] + names[1] + "likes your post") ;
如果名称中有两个条目,则更好:
Console.WriteLine("{0}, {1} likes your post", names[0], names[1])
您正在使用,它接受名称为[0]的字符串和参数作为格式字符串
尝试以下方式连接值:
Console.WriteLine(names[0] + names[1] + "likes your post");
Console.WriteLine(names[0] + names[1] + "likes your post") ;
如果名称中有两个条目,则更好:
Console.WriteLine("{0}, {1} likes your post", names[0], names[1])
这可以通过使用Console.WriteLine的字符串插值函数来实现 第一个参数是字符串,将{x}放在需要替换变量的任何位置。然后,每个进一步的参数将被插入到字符串中。参数提供的顺序决定了它们的x索引值
Console.WriteLine("{0}, {1} likes your post",names[0], names[1]);
这可以通过使用Console.WriteLine的字符串插值函数来实现 第一个参数是字符串,将{x}放在需要替换变量的任何位置。然后,每个进一步的参数将被插入到字符串中。参数提供的顺序决定了它们的x索引值
Console.WriteLine("{0}, {1} likes your post",names[0], names[1]);
试试这个
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");
}
试试这个
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");
}
因为,在viz之间还需要逗号。汤姆,哈里喜欢你的帖子; 可以使用字符串插值。当你有占位符时,它们总是很好用的,比如
Console.WriteLine($"{names[0]}, {names[1]} likes your post");
因为,在viz之间还需要逗号。汤姆,哈里喜欢你的帖子; 可以使用字符串插值。当你有占位符时,它们总是很好用的,比如
Console.WriteLine($"{names[0]}, {names[1]} likes your post");
只要您至少有一个名称可以获得一个以逗号分隔的名称列表,就可以使用string.Join和names。即使您输入了两个以上的名称,也可以这样做。只要您至少有一个名称,就可以使用string.Join和names来获得一个以逗号分隔的名称列表。即使你输入了两个以上的名字,这也会起作用。如果你能解释一下以前的错误以及为什么会修复它,这将非常有帮助——否则OP对发生的事情的了解就不会比以前多了。@Jon Skeet-完成,让我知道你的想法,谢谢,如果你能解释一下以前的错误以及为什么这会解决它,那就真的很有帮助了。否则OP对发生的事情的了解就不会比以前多了。@Jon Skeet-好了,让我知道你的想法,谢谢