Как с помощью выражения установить свойство типа перечисленияC#

Место общения программистов C#
Anonymous
Как с помощью выражения установить свойство типа перечисления

Сообщение Anonymous »

У меня есть класс DataTypeDemo и перечисление TestEnum

Код: Выделить всё

internal class DataTypeDemo
{
public TestEnum Enum { get; set; }
public TestEnum? Enum2 { get; set; }
}

Код: Выделить всё

internal enum TestEnum : int
{
Age = 1,
Name,
Address,
CellPhone,
Max = 500
}
Я использую выражение для установки значений Enum и Enum2 .
Это выражение

Код: Выделить всё

public static void RetrieveGetterSetter(PropertyInfo property, out Func getter, out Action setter) where T : class
{
var userDataExp = Expression.Parameter(typeof(T));

if (property.PropertyType.IsNullableType(out var rootType))
{
// something about nullable
}

var setMethod = property.GetSetMethod();
var inValue = Expression.Parameter(Types.Object);

var destValueExp = Expression.Convert(inValue, setMethod.GetParameters()[0].ParameterType);
var call = Expression.Call(userDataExp, setMethod, destValueExp);

setter = Expression.Lambda(call, userDataExp, inValue).CompileFast();

}
Я всегда получал ошибку System.InvalidCastException, когда для Enum и Enum2 было задано значение int, 2 например, или строка «Макс».
Как решить проблему?

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-property

Вернуться в «C#»