Ich versuche, die folgende Methode mit Generics zu schreiben. (Meine eigentliche Methode ist komplexer als das.)NULL-Wert für unbekannten Typ zurückgeben
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
}
Mein Ziel ist es so etwas wie null
zurück, wenn das Element nicht im Wörterbuch enthalten ist. Das Problem ist, dass ich nicht weiß, welcher Typ T
ist. Wenn T
zum Beispiel eine ganze Zahl wäre, dann sollte ich den Typ T?
zurückgeben. Wenn T
jedoch eine Klasse ist, ist sie bereits nullfähig. Und ich werde das bis zur Laufzeit nicht wissen.
Kann jemand einen sauberen Weg sehen, einen speziellen Wert in dieser Methode zurückzugeben, um anzuzeigen, dass der Artikel ungültig ist? Ich bin offen für etwas anderes als null
, aber es muss ein besonderer Wert sein. (0 ist kein besonderer Wert für ganze Zahlen.)
Das Beste, was Sie tun können, ist 'default (T)', aber das ist nicht "einzigartig" für ein "int". –
Am einfachsten erstellen Sie zwei Überladungen - eine für Klassentypen und eine für Nullable-Strukturen. Alternativ können Sie auch Ihren eigenen 'Maybe' Typ erstellen und diesen zurückgeben. –
Lee
Warum verwendet der Anrufer TryGetValue nicht direkt? Es gibt ein bool zurück, das angibt, ob das Element gültig ist und ein out-Parameter das Element hat, sofern es gültig ist. Oder wenn die Methode komplizierter ist, zumindest etwas, das diesem Muster folgt. –