Solo per aggiungere alla risposta di CKoenig. La sua risposta funzionerà finché la classe con cui hai a che fare è un tipo di riferimento (come una classe). Se l'oggetto personalizzato era una struttura, questo è un tipo di valore e i risultati di .FirstOrDefault
ti daranno una copia locale di quello, il che significa che non tornerà alla raccolta, come mostra questo esempio:
struct MyStruct
{
public int TheValue { get; set; }
}
codice
prova:
List<MyStruct> coll = new List<MyStruct> {
new MyStruct {TheValue = 10},
new MyStruct {TheValue = 1},
new MyStruct {TheValue = 145},
};
var found = coll.FirstOrDefault(c => c.TheValue == 1);
found.TheValue = 12;
foreach (var myStruct in coll)
{
Console.WriteLine(myStruct.TheValue);
}
Console.ReadLine();
l'uscita è 10,1,145
Cambiare la struttura per una classe e l'uscita è 10,12,145
HTH
fonte
2011-08-25 12:22:05
Grazie CKoenig, sarà questo ottenere un riferimento al 'obj' o il valore (copia)? in altre parole, sarà cambiato l'oggetto all'interno della lista? – Burjua
Penso che questo non funzionerebbe se l'oggetto è di tipo struct, rendilo una classe :) –
Dato che hai un elenco di oggetti personalizzati (supponendo che sia una classe e non una struct), hai a che fare con un tipo di riferimento , sarà un riferimento a quell'oggetto e la modifica verrà "persist", modificherà l'oggetto nella raccolta. –