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

Unable to replace a particular object in a list?

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...

您从 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. FirstOrDefault 可以 return 为空。你认为会发生什么。要将值添加到列表中吗?

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

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

var objectToReplace = SelectedListObjA.Where(x => x.FieldA == "ABC").FirstOrDefault();
if (objectToReplace != null)
{
    SelectedListObjA[SelectedListObjA.IndexOf(objectToRelplace)] = ObjA;
}
else
{
    SelectedListObjA.Add(ObjA);
}

干杯

托马斯