Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表仅返回第一个值_C# - Fatal编程技术网

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-好了,让我知道你的想法,谢谢