使用linq </classname>编辑列表<classname>中的项目

时间:2011-02-06 14:53:49

标签: c# linq generic-list

我有一个通用列表。

已满。

其名称为list1。

我们想使用LINQ编辑其项目。

输入------&gt; textbox1.text(list1中的键)

class11中的

键--------&gt; string _number

代码编辑是什么?

更新

这就是我想要的:

List lst= new List();

lst.Add("Shekhar1");

lst.Add("Shekhar2");

lst.Add("Shekhar3");

lst.Add("Shekhar4");

lst.Add("Shekhar5");

//code edit item (Shekhar3) -------> Shekhar88 //code to edit the item...?????

输出:

Shekhar1

Shekhar2

Shekhar88

Shekhar4

Shekhar5

用于编辑(更新)通用列表中的项目:

1-使用linq搜索到通用列表-------&gt;输出索引项

2- lst.RemoveAt(index)

3- lst.Insert(index,new obj);

确定.... !!? 请给我代码linq。 (案例1)

感谢名单

3 个答案:

答案 0 :(得分:4)

嗯,我不知道你想要什么,但我认为你想要使用LINQ和其他一些数据编辑List中的项目可能在文本框中。

无论如何以下是一个示例,为您提供如何开始的想法:(在LINQPAD上运行)

List<string> lst= new List<string>();

lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");
lst.Add("Shekhar");

var edited = (from item in lst  
            select (item = "Pro")).ToList();
lst = edited;

lst.Dump();

输出:

Pro
Pro
Pro
Pro
Pro

<强>更新

根据你的建议,这里的代码是可行的代码

string search_string = "Shekhar3";
string replacement_string = "Shekhar88";
lst = (lst.Select( item => {
                          if(item == search_string) return item = replacement_string;
                          else return item;
                              })).ToList();

答案 1 :(得分:0)

我认为您可能意味着要根据用户输入的内容编辑列表中的项目? IE:根据某个谓词过滤对象列表?

如果是这种情况,你可以像这样使用linq:

List<MyType> myList = PopulateList();

string key = textBox1.Text;
string newValue = "new value";

// If you only want a single item...
MyType item = (from item in myList
              where item.Key == key
              select key).FirstOrDefault();

// If you want a list of matching items
List<MyType> items = from item in myList
                     where item.Key == key
                     select key;

然后,您可以直接编辑所需的项目:

item.Value = newValue;

或通过迭代:

foreach(MyType i in items)
{
    i.Value = newValue;
}

只需使用lambda表达式调用.Where()函数,就可以在没有LINQ的情况下实现相同的功能,例如:

List<MyType> items = myList.Where(i => i.Key == key);

答案 2 :(得分:0)

您可以使用Linq选择新列表,但不能修改现有列表。原因是Linq在内部处理可枚举而不是列表。与列表一起使用的相同代码可以使用数组或使用返回可枚举和yield值的函数。以下是使用Select() (ideone)

替换项目的方法
List<string> list = (new string[] { 
    "Shekhar1", "Shekhar2", "Shekhar3", "Shekhar4", "Shekhar5" }
).ToList();

string match = "Shekhar3";
string replace = "Shekhar88";
List<string> newList = list.Select(x => x == match ? replace : x).ToList();
list = newList;
foreach (string value in list) {
    Console.WriteLine("{0}", value);
}