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

Posted

技术标签:

【中文标题】c#:如何从 List<person> 中的特定索引读取【英文标题】:c# : how to read from specific index in List<person> 【发布时间】:2013-09-07 00:04:25 【问题描述】:

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

列表 ilist 有 2 个值 [0]=firstname,lastname 。 [1]=名2,姓2

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

【问题讨论】:

您好,您可以发布您的代码吗?循环? 很难遵循您的伪代码/描述。 List&lt;T&gt; 提供了一个索引器,因此您可以像访问数组一样访问它。如果您已经尝试过并且遇到了问题,那么如果您展示一个简短但完整的程序来展示您尝试过的内容以及出了什么问题,这将非常有帮助。 如果你找到它,你可以更新它。这就是你找到它的方式。***.com/questions/9854917/… 按照@captain所说的方式发布代码 “我做不到”是什么意思?代码不能编译吗?您是否收到运行时错误?它似乎有效,但您没有看到变化?向我们展示您的Person 的定义,并向我们展示失败的代码......并告诉我们您遇到了什么样的失败。 【参考方案1】:

根据 msdn 上的文档,您可以使用熟悉的索引运算符(就像您在数组上使用的那样)。所以myList[1].lastname = "new last name"; 应该为你做。

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

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

【讨论】:

我的代码是 IList _ilist= new ArrayList(); FileReader(fileB, ref _ilist);我正在从文件中读取数据并添加到列表中 @user2740970 尝试使用通用的List&lt;Person&gt; 而不是ArrayList 类。它会让你的生活更轻松。 @user2740970 你的问题还不清楚。在标题中,您说您正在使用 List&lt;Person&gt;,这意味着您正在使用类型参数为 Person 的通用列表 (List&lt;T&gt;)。 ArrayList 完全是一个不同的类,一般不会在新代码中使用。【参考方案2】:

我在 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# 编译器抱怨它

无法将带有 [] 的索引应用于“对象”类型的表达式

菜鸟的错误,但我的头撞到了墙上。这是正确的代码

foreach (object[] person in myMainList) //cast object[] NOT object

   string firstname = person[1].ToString() //voila!! we have lift off :)

这适用于像我这样因同样的错误而陷入困境的新手。它发生在我们最好的人身上。

【讨论】:

foreach (object[] person in myMainList) 这给了我Cannot convert type 'ConsoleApplication1.Readings' to 'object[]' 错误 @Faisal,看起来您使用的是具体类型而不是对象 []。如果使用新的 c#,请使用“foreach (var person in myMainList)”【参考方案3】:
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;
            

        

    

【讨论】:

考虑扩大你的答案,向提问者解释为什么这会达到预期的结果,可能链接到文档。事实上,这只是微不足道的用处。【参考方案4】:

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

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

【讨论】:

【参考方案5】:

列表可以直接使用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";
    

【讨论】:

我在这里发布了一个新问题,因为我无法回答我的问题***.com/questions/18598129/…【参考方案6】:

我不知道你可以在哪里遇到问题:

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

【讨论】:

以上是关于c#:如何从 List<person> 中的特定索引读取的主要内容,如果未能解决你的问题,请参考以下文章

C#中如何判断一条数据是不是在某个list<T>集合中?

如何从自定义类 Person 创建数据集?

从 C# 中的对象列表中获取 JSON 文件

C# Sort 和 OrderBy 比较

如何从 C# 中的通用 List<T> 中获取元素? [复制]

C# 中如何从List集合中提取第一个值