无法替换列表中的特定对象?
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;
}
你不能那样做。
FirstOrDefault 可以 return 为空。你认为会发生什么。要将值添加到列表中吗?
如果 FirstOrDefault 将 return 一个对象,它只会是一个新变量中对该对象的引用。对该变量的赋值不会改变列表,而只会改变变量指向的引用。列表将保持不变。
如果您想替换列表中的项目,您需要找到该项目的索引并将该索引处的对象替换为您的新对象。
var objectToReplace = SelectedListObjA.Where(x => x.FieldA == "ABC").FirstOrDefault();
if (objectToReplace != null)
{
SelectedListObjA[SelectedListObjA.IndexOf(objectToRelplace)] = ObjA;
}
else
{
SelectedListObjA.Add(ObjA);
}
干杯
托马斯
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;
}
你不能那样做。
FirstOrDefault 可以 return 为空。你认为会发生什么。要将值添加到列表中吗?
如果 FirstOrDefault 将 return 一个对象,它只会是一个新变量中对该对象的引用。对该变量的赋值不会改变列表,而只会改变变量指向的引用。列表将保持不变。
如果您想替换列表中的项目,您需要找到该项目的索引并将该索引处的对象替换为您的新对象。
var objectToReplace = SelectedListObjA.Where(x => x.FieldA == "ABC").FirstOrDefault();
if (objectToReplace != null)
{
SelectedListObjA[SelectedListObjA.IndexOf(objectToRelplace)] = ObjA;
}
else
{
SelectedListObjA.Add(ObjA);
}
干杯
托马斯