我对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