【问题标题】:Find an object within a list and replace its value在列表中查找对象并替换其值
【发布时间】:2015-08-12 13:07:25
【问题描述】:

我有以下列表和班级:

List<MyClass> MyList

public class MyClass
{
    public int id { get; set; }
    public bool checked { get; set; }
}

我也有两个变量:

int idToFind = 1234;
bool newcheckedvalue = true;

我需要做的是搜索列表并找到 MyClass 对象,其中 id 等于 idToFind 的值。一旦我在列表中有对象,然后我想将类中选中属性的值更改为 newcheckedvalue 值的值。

LINQ 似乎是解决这个问题的方法,我只是无法正确表达。我可以在单个 LINQ 表达式中执行此操作吗?

【问题讨论】:

  • 如果 ids 在实例中是唯一的,您可以将它们放在 Dictionary&lt;int, MyClass&gt; 中,而不是像 MyDictionary[idToFind].checked = newcheckedvalue; 一样简单。

标签: c# linq list class


【解决方案1】:

LINQ 用于查询集合,而不是用于修改。你可以找到像这样的对象:

var item = MyList.FirstOrDefault(r=> r.id == idtoFind && r.checked == newcheckedvalue);

要根据ID 查找项目只有你可以这样做:

var item = MyList.FirstOrDefault(r=> r.id == idtoFind);

稍后您可以设置/修改其属性。

//Make sure to check against Null, as if item is not found FirstOrDefault will return null
item.checked = newcheckedvalue; //or any other value

【讨论】:

  • != newcheckedvalue,确定吗?然后item.checked = newcheckedvalue.
  • 当然,像往常一样,您可能需要处理默认 (null) 情况。但是,是的.FirstOrDefault 是要走的路。
  • @CharlesMager,你让我想,我猜 OP 只想查找基于 id 的记录。
【解决方案2】:

例子(需要注意的是MyClass类型必须是一个class,在这个例子中是一个引用类型):

var found  = MyList.Where(ml=>ml.Id == 1234); 
foreach(var f in found)
    f.checked = newcheckedvalue;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2020-09-01
    相关资源
    最近更新 更多