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

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

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

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

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

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

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

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

假设我们有

 IList myMainList = new List(); 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#编译器抱怨它

无法将[]索引应用于’object’类型的表达式

新秀的错误,但我的头撞到了墙上一点点。 这是正确的代码

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

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

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

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

可以使用索引器直接修改列表。

 public class Person { public string FirstName { get; set; } public string LastName { get; set; } } var list = new List { 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"; } } 

我看不出你在哪里可以遇到这个问题:

 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 lst = new List(); 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 
 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 list = new List(); 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