2016-06-20 39 views
-2
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...無法替換列表中的特定對象?

+0

我想'FirstOrDefault()'會返回對象? –

+0

基本上我會檢索一個obj,其中'FieldA =='ABC''和第一個出現將被'ObjA'替代。 'ObjA.FieldA'將例如'CDE'....基本上它是一個不同的對象 –

+0

'ObjA = SelectedListObjA.Where(x => x.FieldA ==「ABC」)。FirstOrDefault()' – Mairaj

回答

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; 
} 
0

你不能這樣做。

  1. FirstOrDefault可以返回null。你認爲會發生什麼?該值應該添加到列表中嗎?

  2. 如果FirstOrDefault將返回一個對象,它將只是對新變量中對象的引用。對該變量的賦值不會改變列表,而只是變量指向的引用。名單將保持不變。

如果您想要替換列表中的項目,您將需要找到該項目的索引並用該新索引替換該索引處的對象。

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

乾杯

托馬斯