列表仅返回第一个值

时间:2020-06-08 12:08:34

标签: 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");
}

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

您能指出这个问题吗?

5 个答案:

答案 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");