ОК, в этом случае вам нужно использовать Enum.ToObject
, так как вы используете отражение.Но вам также нужно распаковать обнуляемое значение, чтобы использовать то, что Nullable.GetUnderlyingType
делает для вас.
Итак, вам нужно получить Type
, соответствующий MyEnum
:
Type nullableEnumType = propertyInfoTwo.PropertyType;
Type enumType = Nullable.GetUnderlyingType(nullableEnumType);
затем используйте Enum.ToObject
, чтобы создать в штучной упаковке экземпляр MyEnum
со значением, которое вы укажете:
object enumValue = Enum.ToObject(enumType, myInteger);
Итак, собрав все вместе:
object enumValue = Enum.ToObject(Nullable.GetUnderlyingType(propertyInfoTwo.PropertyType), myInteger);
propertyInfoTwo.SetValue(objectInstance, enumValue, null);
РЕДАКТИРОВАТЬ:
, если myInteger
обнуляется, вы должны использовать:
object enumValue =
myInteger.HasValue
? Enum.ToObject(Nullable.GetUnderlyingType(propertyInfoTwo.PropertyType), myInteger.Value);
: null;