2009-10-21 5 views
6

Diciamo che ho una classe C#:In C#, un metodo può restituire l'elenco in modo tale che i client possano solo leggerlo, ma non scrivere su di esso?

class Foo 
{ 
    private List<Bar> _barList; 
    List<Bar> GetBarList() { return _barList; } 
... 
} 

Un client può chiamare:

var barList = foo.GetBarList(); 
barList.Add(...); 

C'è un modo per rendere il metodo Add falliscono perché solo una versione di sola lettura del _barList è tornato?

+0

Ricordare che anche se non è possibile aggiungere o rimuovere oggetti dall'elenco, è comunque possibile modificare gli oggetti nell'elenco (impostare valori su proprietà, metodi di chiamata che modificano lo stato). –

risposta

15

Sì, in GetBarList() restituire _barList.AsReadOnly().

Edit:
Come Michael ha sottolineato di seguito, il metodo dovrebbe restituire un IList<Bar>.

+2

Bello! Nota che, poiché questo restituisce un ReadOnlyCollection, che implementa IList, il tuo accessor deve anche restituire un IList e non un Elenco. –

+0

fantastico, grazie! – zumalifeguard

+0

Michael, grazie per avermelo fatto notare. –

4

Si può provare a utilizzare ReadOnlyCollection. Oppure restituire solo IEnumerable dal metodo, i client non avranno metodi per modificarlo.

+0

Il primo è migliore in quanto quest'ultimo può essere restituito a un elenco –

Problemi correlati