c#:如何从List <person> </person>中的特定索引读取

时间:2013-09-03 16:56:44

标签: c# list for-loop collections arraylist

我有一类人和列表集合,因为列表包含人类的所有值 如:

列表ilist有2个值[0] = {firstname,lastname}。 [1] = {FIRSTNAME2,lastname2}

现在,当我迭代到列表中时,我能够打印列表,但我想更改列表中某些部分的值,例如在索引1中,如果我想将firstname2的值更改为firstname3,我无法去做吧 。任何人都可以告诉我如何打印列表,然后在该索引上更改索引的任何值,即person类中的firstname和secondname变量,以便我可以更新我的值 谢谢

6 个答案:

答案 0 :(得分:2)

根据msdn上的文档,你可以使用熟悉的索引操作符(比如你在数组上使用的内容)。所以myList[1].lastname = "new last name";应该为你做。

文件在这里; http://msdn.microsoft.com/en-us/library/0ebtbkkc.aspx

请记住,您需要在访问前进行边界检查。

答案 1 :(得分:1)

我在Google上搜索access specific index in object array values C#时来到这里,但却遇到了这个令人困惑的问题。现在,对于那些正在寻找类似解决方案的人来说(获取包含其中数组的对象IList的特定字段)。与OP在他的问题中解释的非常类似,你有IList人和人包含名字,姓氏,单元格等,你想得到人的名字1.这是你如何做到的。

假设我们有

IList<object> myMainList = new List<object>();
myMainList.Add(new object[] { 1, "Person 1", "Last Name 1" });
myMainList.Add(new object[] { 2, "Person 2", "Last Name 2" });

起初,我会这样做:

foreach (object person in myMainList)
{
   string firstname = person[1].ToString() //trying to access index 1 - looks right at first doesn't it??
}

但令人惊讶的是,C#编译器抱怨它

  

无法将[]索引应用于&#39; object&#39;

类型的表达式

新秀的错误,但是我的头靠在墙上了一会儿。这是正确的代码

foreach (object[] person in myMainList) //cast object[] NOT object
{
   string firstname = person[1].ToString() //voila!! we have lift off :)
}

这适用于像我这样的新手,使用同样的错误卡住了。它发生在我们最好的人身上。

答案 2 :(得分:0)

有关您的要求的更多信息/您以这种方式访问​​列表的原因可能有助于提供更好的方法建议,但是:

  1. 如果您想以这种方式使用列表,则Array或ArrayList可能是更好的选择。
  2. 也就是说,如果您的具体问题是确定要更改ID的当前元素,则可以使用IndexOf()。 (注意这将循环数组以找到对象的位置)
  3. 如果你只知道元素的索引,你可以引用你和@evanmcdonnal描述的内容。

答案 3 :(得分:0)

可以使用indexer直接修改列表。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

var list = new List<Person>
           {
               new Person
               {
                  FirstName = "Bob",
                  LastName = "Carlson"
               },
               new Person
               {
                  FirstName = "Elizabeth",
                  LastName = "Carlson"
               },
           };

// Directly               
list[1].FirstName = "Liz";

// In a loop
foreach(var person in list)
{
    if(person.FirstName == "Liz")
    {
        person.FirstName = "Lizzy";
    }
}

答案 4 :(得分:0)

我看不出你能解决问题的地方:

public class Persons
{
    public Persons(string first, string last)
    {
        this.firstName = first;
        this.lastName = last;
    }
    public string firstName { set; get; }
    public string lastName { set; get; }
}

...

        List<Persons> lst = new List<Persons>();
        lst.Add(new Persons("firstname", "lastname"));
        lst.Add(new Persons("firstname2", "lastname2"));

        for (int i = 0; i < lst.Count; i++)
        {
            Console.Write("{0}: {2}, {1}", i, lst[i].firstName, lst[i].lastName);
            if (i == 1)
            {
                lst[i].firstName = "firstname3";
                lst[i].lastName = "lastname3";
                Console.Write(" --> {1}, {0}", lst[i].firstName, lst[i].lastName);
            }
            Console.WriteLine();
        }

    }

输出:

0: lastname, firstname
1: lastname2, firstname2 --> lastname3, firstname3

答案 5 :(得分:0)

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

namespace TestApp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> list = new List<Person>();
           Person oPerson = new Person();
            oPerson.Name = "Anshu";
            oPerson.Age = 23;
            oPerson.Address = " ballia";
            list.Add(oPerson);
             oPerson = new Person();
            oPerson.Name = "Juhi";
            oPerson.Age = 23;
            oPerson.Address = "Delhi";
            list.Add(oPerson);


            oPerson = new Person();
            oPerson.Name = "Sandeep";
            oPerson.Age = 24;
            oPerson.Address = " Delhi";
            list.Add(oPerson);

            int index = 1;     // use for getting index basis value

            for (int i=0; i<list.Count;i++)
            {
                Person values = list[i];
                if (index == i)
                {
                    Console.WriteLine(values.Name);
                    Console.WriteLine(values.Age);
                    Console.WriteLine(values.Address);
                    break;
                }
            }

            Console.ReadKey();

        }
    }

    class Person
    {
        string _name;
        int _age;
        string _address;

        public String Name
        {
            get
            {
                return _name;
            }
            set
            {
                this._name = value;
            }

        }
        public int Age
        {
            get
            {
                return _age;
            }
            set
            {
                this._age = value;
            }
        }
        public String Address
        {
            get
            {
                return _address;
            }
            set
            {
                this._address = value;
            }

        }

    }
}