EDIT: This is now available in C# 7.0.C# switch con tipi
ho il seguente pezzo di codice che controlla un dato PropertyInfo
s' type
.
PropertyInfo prop;
// init prop, etc...
if (typeof(String).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(Int32).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(DateTime).IsAssignableFrom(prop.PropertyType)) {
// ...
}
C'è un modo per utilizzare una dichiarazione switch
in questo scenario? Questa è la mia soluzione attuale:
switch (prop.PropertyType.ToString()) {
case "System.String":
// ...
break;
case "System.Int32":
// ...
break;
case "System.DateTime":
// ...
break;
default:
// ...
break;
}
Non credo che questa sia la soluzione migliore, perché ora devo dare il String
valore completo del data type
. Qualche consiglio?
penso che ci sia alcun modo. L'interruttore funziona principalmente su string, int e enum (int di nuovo nella scena). Con è assegnabile da voi potete controllare anche il tipo che eredita da un altro, con la stringa questo è sicuramente impossibile. – Skary
se i tipi con cui stai lavorando sono solo Int32, stringa e DateTime, il tuo if può usare == invece di IsAssignableFrom (sono classi sigillate): if (prop.PropertyType == typeof (stringa) ... Ma comunque , non è possibile utilizzare typeof (someClass) come etichetta del caso, né è possibile utilizzare un argomento Type come parametro. Rimanerei con il se –
Possibile duplicato di [Esiste un'alternativa migliore rispetto a "attiva il tipo"? ] (http://stackoverflow.com/questions/298976/is-there-a-better-alternative-than-this-to-switch-on-type) – Dmitry