我對LINQ和Lambda查詢的結果有疑問。例如,我有以下代碼:關於LINQ和Lambda查詢的問題
class ClassA<T> {
public string Name { get; set; }
public T ObjectT { get; set; }
}
List<ClassA<T>> list;
// list is populated
// First way to get instance from list, reference type?
ClassA<T> instance1 = list.Select(x=> x).Where(x=>x.Name == "A").
FirstOrDefault();
// Second way to clone or copy instance from the list
ClassA<T> instance2 = list.Select(x=>
new ClassA<T> { Name = x.Name, ObjectT = x.ObjectT}).
Where(x=> x.Name = "A").FirstOrDefault();
顯然,instance2是在列表中找到的實例的克隆或副本。 instance1怎麼樣?這是一個新實例還是僅僅是對列表中實例的引用?如果instance1是對列表項的對象引用,則對其屬性的任何更改都可能會更改列表中的同一對象。是對的嗎?
如果是這種情況,我不想對列表中的對象有任何隱式的影響,我想我應該使用第二種策略。但是,如果我確實希望檢索到的實例中的任何更改在列表中也有相同的更改,我應該使用策略1.不確定我的理解是否正確。任何意見?
我認爲這種方式會被推薦,我鬆了一口氣,並改爲擴展方法來傳播空值。 – Jimmy 2009-07-27 21:50:40
確實,擴展方法有這個優點。事實上,你甚至可以對任何'ICloneable'類進行擴展。 – jpbochi 2009-07-27 21:59:28