J'ai une question sur le résultat de la requête LINQ et Lambda. Par exemple, je les codes suivants:Question sur LINQ et Lambda requery
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();
Il est évident que instance2 est un clone ou une copie d'une instance trouvée dans la liste. Que diriez-vous d'instance1? S'agit-il d'une nouvelle instance ou simplement d'une référence à une instance de la liste? Si instance1 est une référence d'objet à l'élément de la liste, toute modification de sa propriété peut changer le même objet dans la liste. Est-ce correct?
Si c'est le cas et que je ne veux pas avoir d'effet implicite sur les objets de la liste, je pense que je devrais utiliser la seconde stratégie. Cependant, si je veux que les changements dans les instances récupérées aient aussi les mêmes changements dans la liste, je devrais utiliser la stratégie 1. Je ne sais pas si ma compréhension est correcte. Des commentaires?
Je pense que cette façon serait recommandée, j'ai laissé tomber et changé en méthode d'extension pour propager les nulls. – Jimmy
En effet, la méthode d'extension a cet avantage. En fait, vous pourriez même faire une extension à n'importe quelle classe 'ICloneable'. – jpbochi