Getter in C # è solo un metodo speciale che restituisce un valore, non più o meno. Quindi se hai bisogno di chiamare il metodo due volte, sarà sicuramente usato due volte.
Nel tuo esempio specifico, la prima chiamata per ottenere il Conteggio, la seconda chiamata per scorrere tutti gli elementi del valore restituito (che è un Elenco).
Se esiste un campo di supporto per la tua proprietà, la prima chiamata che ottiene Count
non farebbe nulla di costoso o considerevole, il Count
è sempre lì per l'accesso rapido.
Tuttavia, se la tua proprietà crea sempre un nuovo List<A>
su ogni accesso, qualcosa del genere:
List<A> CurrentList {
get {
return new List<A>(....);
}
}
Quindi potrebbe essere qualcosa di sbagliato con il tuo codice qui. In questo caso, è necessario ottenere l'elenco prima di fare qualsiasi cosa sul risultato restituito (ottenendo Count
e ciclicamente attraverso tutti gli elementi), in questo modo:
void DoSomethingWithList() {
var list = CurrentList;
if(list.Count > 42)
{
foreach(A processingA in list)
{
processingA.DoSomething();
}
}
}
Ancora una volta vorrei sottolineare che se si utilizza un campo di supporto per la tua proprietà, il tuo codice dovrebbe andare bene (e non può essere diverso per essere migliore).
Tutto ciò che inserisci nella chiusura di get
darà come risultato un metodo getter come questo:
List<A> getMethod(){
return new List<A>(....);
}
Niente di speciale qui, la proprietà è solo un involucro del metodo getter e setter. Invece di usare 2 metodi separati, possiamo semplicemente usare 1 proprietà e usare =
intuitivamente. In un altro punto di vista, Property ha l'aspetto di un wrapper attorno ad un backing field (in alcuni casi, poiché alcune proprietà non hanno un backing field), quindi aggiunge un altro layer logico al punto di accesso del backing field (come il controllo del differenza tra il nuovo valore e il valore corrente del campo di supporto per aumentare alcuni eventi PropertyChanged, ...).