Sto provando a scrivere il seguente metodo utilizzando i generici. (Il mio metodo reale è più complessa di così.)Valore iniziale nullo per tipo sconosciuto
public T ParseDictionaryItem<T>(string s, Dictionary<string, T> dictionary)
{
T result;
if (dictionary.TryGetValue(s, out result))
return result;
// TODO: Return special value such as null to indicate invalid item
}
Il mio obiettivo è quello di tornare qualcosa come null
se l'articolo non è presente nel dizionario.
Il problema è che non so quale sia il tipo T
. Se T
era un numero intero, ad esempio, dovrei restituire il tipo T?
. Tuttavia, se T
è una classe, allora è già annullabile. E non lo saprò fino all'ora legale.
Qualcuno può vedere un modo pulito per restituire un valore speciale in questo metodo per indicare che l'articolo non è valido? Sono aperto a restituire qualcosa di diverso da null
, ma deve essere un valore speciale. (0 non è un valore speciale per i numeri interi.)
Il meglio che puoi fare è "default (T)", ma non sarà "univoco" per un 'int'. –
Il modo più semplice è creare due overload: uno per i tipi di classe e uno per le strutture nullable. In alternativa crea il tuo tipo 'Maybe' e restituiscilo. –
Lee
Perché il chiamante non usa direttamente TryGetValue? Restituisce un bool che indica se l'elemento è valido e un parametro out ha l'oggetto, se valido. O se il metodo è più complicato, almeno qualcosa che segue quel modello. –