Quando codifico mi piace usare le collezioni tipizzate, il metodo più veloce è usare "STC Generator" di Pierre oppure andare su MSDN alla voce "CollectionBase class", http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemcollectionscollectionbaseclasstopic.asp, copiare e incollare la classe di esempio (una collectionBase di Int16) e fare replace di Int16 con il tipo di cui voglio creare la collezione. Ma è sufficiente? No, a mio parere occorre sistemare anche il metodo OnValidate.
L'esempio MSDN inviterebbe a scrive:
protected override void OnValidate( Object value ) {
if ( value.GetType() != Type.GetType("MyNamspace.MyType") )
throw new ArgumentException( "value must be of type MyType.", "value" );
}
Che bruttura dico io! :( Io prefesisco scrivere:
protected override void OnValidate( Object value ) {
if ( !(value is MyType )) //Errata korrige: nella prima versione di qsto post mankava il "!" :-p
throw new ArgumentException( "value must be of type MyType.", "value" );
}
L'operatore Is, http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/csref/html/vclrfispg.asp, oltre che essere più elegante funziona meglio nel caso voglio aggregare nella collezione oggetti non solo che sono del mio tipo ma anche che lo estendono. L'esempio dell'MSDN limita la collezione al solo tipo _preciso_ ma per chi fa uso del polimorfismo, qui una definizione semplice e veloce di qllo ke intendo, questo è un limite fastidioso.
So bene che questo è una considerazione che con la versione 2.0 sarà obsoleta perchè grazie ai generics con una riga di codice avremo già la ns bella collezione tipizzata :-D
posted @ lunedì 4 luglio 2005 13:45