C# 仅从列表中获取最后一个值

C# 仅从列表中获取最后一个值,c#,C#,我的列表有问题,因为我总是从列表中只得到最后一个值。我不知道我该怎么修复它。。。我尝试过覆盖等,但它的功能不正确,或者我做的不正确 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp13 { class Program { static pub

我的列表有问题,因为我总是从列表中只得到最后一个值。我不知道我该怎么修复它。。。我尝试过覆盖等,但它的功能不正确,或者我做的不正确

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp13
{
    class Program
    {
        static public List<Person> personList = new List<Person>();
        static void Main(string[] args)
        {

            Person person = new Person();
            do
            {
                Console.WriteLine("Your name: ");
                person.Name = Console.ReadLine();
                Console.WriteLine("Your Surname: ");
                person.Surname = Console.ReadLine();
                personList.Add(person);
            }
            while (personList.Count < 3);

            foreach (Person item in personList) 
            {
                Console.WriteLine(item.Name + " " + item.Surname);
            }


            Console.ReadKey();
        }
    }

    class Person
    {
        public string Name { get; set; }
        public string Surname { get; set; }
    }

}


因为您要修改同一实例3次。将person的实例化放在do while循环中,如下所示:

...
do
{
    var person = new Person();
    Console.WriteLine("Your name: ");
...

因为您要修改同一实例3次。将person的实例化放在do while循环中,如下所示:

...
do
{
    var person = new Person();
    Console.WriteLine("Your name: ");
...

初始化循环中的person对象

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp13
    {
        class Program
        {
            static public List<Person> personList = new List<Person>();
            static void Main(string[] args)
            {
    
                
                do
                {
                    Person person = new Person();//initialize here
                    Console.WriteLine("Your name: ");
                    person.Name = Console.ReadLine();
                    Console.WriteLine("Your Surname: ");
                    person.Surname = Console.ReadLine();
                    personList.Add(person);
                }
                while (personList.Count < 3);
    
                foreach (Person item in personList) 
                {
                    Console.WriteLine(item.Name + " " + item.Surname);
                }
    
    
                Console.ReadKey();
            }
        }
    
        class Person
        {
            public string Name { get; set; }
            public string Surname { get; set; }
        }
    
    }

初始化循环中的person对象

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace ConsoleApp13
    {
        class Program
        {
            static public List<Person> personList = new List<Person>();
            static void Main(string[] args)
            {
    
                
                do
                {
                    Person person = new Person();//initialize here
                    Console.WriteLine("Your name: ");
                    person.Name = Console.ReadLine();
                    Console.WriteLine("Your Surname: ");
                    person.Surname = Console.ReadLine();
                    personList.Add(person);
                }
                while (personList.Count < 3);
    
                foreach (Person item in personList) 
                {
                    Console.WriteLine(item.Name + " " + item.Surname);
                }
    
    
                Console.ReadKey();
            }
        }
    
        class Person
        {
            public string Name { get; set; }
            public string Surname { get; set; }
        }
    
    }
向personList添加person时,它是对person对象的引用。它不是该对象的副本。这意味着,如果需要不同的对象,还需要在每次交互中创建一个新的Person对象

do
            {
                Person person = new Person();
                Console.WriteLine("Your name: ");
                person.Name = Console.ReadLine();
                Console.WriteLine("Your Surname: ");
                person.Surname = Console.ReadLine();
                personList.Add(person);
看看引用和值类型。

向personList添加person时,它是对person对象的引用。它不是该对象的副本。这意味着,如果需要不同的对象,还需要在每次交互中创建一个新的Person对象

do
            {
                Person person = new Person();
                Console.WriteLine("Your name: ");
                person.Name = Console.ReadLine();
                Console.WriteLine("Your Surname: ");
                person.Surname = Console.ReadLine();
                personList.Add(person);
看看引用和值类型。

感谢朋友对我的问题的顺利解释。这很有帮助。谢谢你的朋友顺利解释我的问题。这很有帮助。