begegnete mir nur eine seltsame Einschränkung während der Portierung in einem Konverter zu generischem Code explizit Code eingegeben:Warum wird Enum-Cast auf kurze, aber nicht gepackte Generic-Enum-Casts angewendet?
Wenn ein short
(Int16
) mit ihm möglich ist, es zu einem Aufzählungstyp zu werfen. Wenn Sie das Gleiche mit einem generischen Enum-Typ und einem Box-Cast tun ((T)(object)value
), ist dies eine ungültige Konvertierung.
Ich konnte die Konvertierung durch Hinzufügen einer dritten Besetzung erfolgreich machen. Es sieht jetzt so aus:
Int16 numericValue;
...
var enumValue = (TEnum)(Object)(Int32)numericValue;
Warum ist das? Der folgende (alte) Code funktionierte gut:
Int16 numericValue;
...
var enumValue = (MyEnum)numericValue;
Sie wissen sicher, dass der zugrunde liegende Typ von 'TEnum' wird' int' ('Int32')? Wenn der zugrunde liegende Typ "kurz" ("Int16") gewesen wäre, hätte Ihr erster Ansatz funktioniert. –
es ist Standard, also wahrscheinlich int, aber ich sehe keinen Grund, warum ich es nicht zu kurz in meinem Fall ändern sollte –
Sonst, hier sind einige andere hässliche Optionen für Sie, die unabhängig vom zugrunde liegenden Typ funktionieren sollten: ' var enumValue = (TEnum) Enum.ToObject (typeof (TEnum), numericValue) '' oder 'var enumValue = (TEnum) (dynamisch) numericValue;' –