Provengo dal Wild Wild West di PHP e Javascript dove è possibile restituire qualsiasi cosa da una funzione. Anche se odio questa mancanza di responsabilità, devo anche affrontare una nuova sfida nel tentativo di mantenere il mio codice "perfetto".Come evitare problemi di intervallo in funzioni generiche
ho fatto questa funzione generica per scegliere un elemento casuale da un elenco
public static T PickRandom<T>(this IList<T> list) {
Random random = new Random();
int rnd = random.Next(list.Count);
return list[rnd];
}
ma voglio proteggermi da utilizzarlo in un elenco con i valori 0. Ovviamente non posso restituire nulla da questa funzione diversa da T, come false o -1. Posso ovviamente fare questo
if(myList.Count > 0)
foo = Utilites.PickRandom(myList);
Tuttavia ci sono così tante cose pazzesche in C# che io non conosco, e per questo app sto creando io molto, molto spesso devo scegliere un elemento casuale da un lista che potrebbe essere costantemente decrementata nel suo conteggio. C'è un modo migliore?
cosa dovrebbe succedere se un po 'si fa chiamare questo metodo su una lista vuota? – Rob
Suppongo che non dovrebbe restituire nulla, ma che non è possibile? – user3822370
Se l'elenco contiene tipi di riferimento (oggetti, ad esempio), è possibile farlo. Ma questo non funziona per cose come 'int' a meno che tu non dica esplicitamente che è null-able. Mi sembra che sia ** invalid ** chiamare questo metodo su una lista vuota, quindi un'eccezione dovrebbe andare bene. Restituire null potrebbe essere inaspettato per il chiamante. Vorrei lanciare un'eccezione se conta == 0 nel metodo PickRandom. Inoltre, dovresti usare questo: 'random.Next (list.Count - 1)', oppure puoi ottenere un'eccezione cercando di accedere all'elemento 'last + 1'. – Rob