EDIT: This is now available in C# 7.0.C# przełącznik z typów
Mam następujący fragment kodu, który sprawdza dany 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)) {
// ...
}
Czy istnieje sposób, aby użyć switch
oświadczenie w tym scenariuszu? To jest mój obecny rozwiązanie:
switch (prop.PropertyType.ToString()) {
case "System.String":
// ...
break;
case "System.Int32":
// ...
break;
case "System.DateTime":
// ...
break;
default:
// ...
break;
}
Nie sądzę, jest to najlepsze rozwiązanie, bo teraz muszę dać pełną String
wartość danego type
. Jakieś wskazówki?
myślę, nie ma sposobu. Przełącznik działa głównie na stringach, int i enum (int ponownie zmienia scenę). Z można przypisać z można sprawdzić nawet typ, który dziedziczy z innego, z ciągiem jest to zdecydowanie niemożliwe. – Skary
Jeśli Typy, z którymi pracujesz, to tylko Int32, string i DateTime, twoje jeśli mogą użyć == zamiast IsAssignableFrom (są klasami zapieczętowanymi): if (prop.PropertyType == typeof (string) ... Ale mimo to , nie możesz użyć typeof (someClass) jako etykiety case, ani nie możesz użyć argumentu Type jako przełącznika Pozostałbym z if Jeśli –
Możliwy duplikat [Czy istnieje lepsza alternatywa niż ta, aby "włączyć typ"? ] (http://stackoverflow.com/questions/298976/is-there-a-better-alternative-than-this-to-switch-on-type) – Dmitry