我有一个简单的程序,在其中输入名称,然后按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");
}
但是,我一直只找回名字,甚至没有“喜欢您的帖子”部分。我尝试调试它,但我总是在列表中看到正确数量的项目,但仍然是错误的。
您能指出这个问题吗?
答案 0 :(得分:6)
尝试这样:
Console.WriteLine(names[0] + names[1] + "likes your post");
说明:
使用以前的方式,您(无意间)指定了格式字符串(例如names[0]
),这不是您想要的。
您有:
Console.WriteLine(names[0], names[1] + "likes your post");
因此在上面的代码中,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);
"{0}, {1}, {2}"
是格式字符串,{0}
的意思是“用格式字符串后的第一个参数替换此值”,在此示例中为value1
。 {1}
的意思是“用格式字符串后的第二个参数替换此值”,在此示例中为value2
。
使用此修复程序,我们只是完全删除了格式字符串,并为Console.WriteLine
提供了一个参数,因此它只逐字打印文本。
答案 1 :(得分:3)
尝试一下
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");
}
答案 2 :(得分:1)
您正在使用overload,它接受format字符串和参数,其中names[0]
是格式字符串。
尝试像这样串联值:
Console.WriteLine(names[0] + names[1] + "likes your post") ;
或更佳的选择(对于名称中有两个条目的情况):
Console.WriteLine("{0}, {1} likes your post", names[0], names[1])
答案 3 :(得分:0)
这可以通过使用Console.WriteLine()
的字符串插值功能来实现。
您的第一个参数是您的字符串,在要替换变量的位置放置{x}
。然后,每个其他参数将插入到您的字符串中。参数的提供顺序决定了它们的x
索引值。
Console.WriteLine("{0}, {1} likes your post",names[0], names[1]);
答案 4 :(得分:0)
从那时起,您也希望逗号之间保持逗号。汤姆,哈里喜欢你的帖子; 您可以使用字符串插值。当您有占位符时,它们总是很好用,例如
Console.WriteLine($"{names[0]}, {names[1]} likes your post");