【问题标题】:Edit item in list<className> with linq使用 linq 编辑 list<className> 中的项目
【发布时间】:2014-05-16 06:21:55
【问题描述】:

我有一个通用列表。

已经满了。

它的名字是list1。

我们想使用 LINQ 来编辑它的项目。

intput ------> textbox1.text(在list1中键入)

class11中的key-------->字符串_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 搜索通用列表 -------> 输出索引项

2- lst.RemoveAt(index)

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

好的……!!? 请给我代码linq。 (案例一)

感谢

【问题讨论】:

  • 请稍微纠正你的问题,我无法在这里解读问题。
  • 我想使用 linq 编辑列表中的项目
  • 好的,我已经给出了答案..这就是你想要的..
  • 为什么使用 LINQ? lst[lst.IndexOf("Shekhar3")] = "Shekhar88";。请注意,您需要检查项目是否存在。
  • 可以写一个完美的例子。谢谢

标签: c# linq generic-list


【解决方案1】:

好吧,我不知道你在这里想要什么,但我认为你想通过使用 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();

输出:

专业版

专业版
专业版
专业版

更新

好的,根据您的建议,这里的代码可以工作

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

【讨论】:

  • 可简写为:lst.Select(item =&gt; item = "Pro ");
  • +1 是的,我知道.. 只是没有这样做...thanx 的建议
  • @HuBeZa 使用您的代码,我们仍然需要将其转换为 List,因为查询使其成为 IEnumerable List .. 正如我在更新中显示的那样
  • 请用小写字母回答。谢谢
  • 哦,好的答案更新..您应该在您的问题本身中更新...
【解决方案2】:

我认为您的意思可能是要根据用户输入的内容来编辑列表中的项目? 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;
}

您可以在不使用 LINQ 的情况下通过简单地使用 lambda 表达式调用 .Where() 函数来实现相同的目的,例如:

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

【讨论】:

  • 我应该使用这种方法。 list1.Remove(item) 和 list1.Insert(index);索引是整数。
  • @mah_85:取决于你实际在做什么。如果它只是从一个小列表中删除和添加一个字符串,那么两者都一样好。如果您有非常大的列表,或者更复杂的对象列表,那么就地更新肯定更容易,而且可能更快。
  • 请用小写字母回答。谢谢
  • 在其中输出 cod 不是索引项
【解决方案3】:

您可以使用 Linq 选择新列表,但不能修改现有列表。原因是 Linq 处理可枚举而不是内部列表。与列表一起使用的相同代码可以与数组或返回可枚举和yields 值的函数一起使用。以下是使用 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2014-11-29
    • 2023-03-22
    • 2011-04-26
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多