无法替换列表中的特定对象?

时间:2016-06-20 07:14:27

标签: c# variable-assignment

SelectedListObjA.Where(x => x.FieldA == "ABC").FirstOrDefault() = ObjA;

SelectedListObjA = new List<ObjType>();
ObjType ObjA = new ObjType();

任何人都可以向我解释为什么上述陈述是错误的。它正在投掷The Left hand side of an assignment must be a variable...

2 个答案:

答案 0 :(得分:5)

FirstOrDefault的结果是源代码中的第一个元素。所以你得到一个对象。但是只能在variable, property or indexer上执行分配。如果要替换对象,可以使用以下内容:

var tmp = SelectedListObjA.Where(x => x.FieldA == "ABC").FirstOrDefault();
if (tmp != null) { // If tmp is reference type. Would be better to use default()
    var index = SelectedListObjA.IndexOf(tmp);
    SelectedListObjA[index] = ObjA;
}

答案 1 :(得分:0)

你做不到。

  1. FirstOrDefault可以返回null。你认为会发生什么?是否应将该值添加到列表中?

  2. 如果FirstOrDefault将返回一个对象,它将只是一个新变量中对象的引用。对该变量的赋值不会更改列表,只会更改变量指向的引用。名单将保持不变。

  3. 如果要替换列表中的项目,则需要找到该项目的索引,并将该索引处的对象替换为新项目。

    set.seed(0); Product <- rbinom(100, 20, 0.3)
    

    干杯

    托马斯