如何获取可空枚举的 toString 方法以构建表达式调用
How to get toString method for the Nullable Enum for building an Expression Call
enum StrategyType
{
Straddle,
Butterfly
}
class Test
{
public StrategyType strategy {get; set;}
}
bool IsNullableEnum(Type t)
{
Type u = Nullable.GetUnderlyingType(t);
return (u != null) && u.IsEnum;
}
var toStringMethod = typeof(Enum).GetMethod("ToString", new Type[] { });
var entity = new Test();
var entityParameter = Expression.Parameter(entity);
Expression memberProperty = Expression.Property(entityParameter, "strategy");
memberProperty = Expression.Call(memberProperty, toStringMethod);
如果我将测试中的 StrategyType 枚举 class 更改为 Nullable,如下所示:
StrategyType? strategyType {get; set;}
然后,我找不到为 Nullable Enum 获取 toString 方法的方法,类似于我为简单 Enum StrategyType 所做的方法。
谁能帮忙。
Nullable<>
有点棘手。当您找到这样的 属性 时,您必须对照给定实体检查从 prop.GetValue(entity)
返回的内容。这是 null
(并且尝试调用 ToString()
是不可能的)或者您返回值类型(但装箱为对象),但您可以调用 normalToString()
方法。
if (IsNullableEnum(prop.PropertyType) && prop.GetValue(entity) != null)
memberProperty = Expression.Call(memberProperty, toStringMethod);
一般来说,您应该发出对 actual 类型方法的调用,而不是 Enum
。它适用于可空值类型和不可空值类型,包括 enum
s.
您可以在 GetMethod
调用中使用实际类型,或者(最好)使用 string methodName
重载 Expressing.Call
,例如
// (Test e) =>
var entityParameter = Expression.Parameter(typeof(Test), "e");
// e.strategy
Expression source = Expression.Property(entityParameter, "strategy");
// e.strategy.ToString()
var toStringCall = Expression.Call(source, "ToString", Type.EmptyTypes);
enum StrategyType
{
Straddle,
Butterfly
}
class Test
{
public StrategyType strategy {get; set;}
}
bool IsNullableEnum(Type t)
{
Type u = Nullable.GetUnderlyingType(t);
return (u != null) && u.IsEnum;
}
var toStringMethod = typeof(Enum).GetMethod("ToString", new Type[] { });
var entity = new Test();
var entityParameter = Expression.Parameter(entity);
Expression memberProperty = Expression.Property(entityParameter, "strategy");
memberProperty = Expression.Call(memberProperty, toStringMethod);
如果我将测试中的 StrategyType 枚举 class 更改为 Nullable,如下所示:
StrategyType? strategyType {get; set;}
然后,我找不到为 Nullable Enum 获取 toString 方法的方法,类似于我为简单 Enum StrategyType 所做的方法。
谁能帮忙。
Nullable<>
有点棘手。当您找到这样的 属性 时,您必须对照给定实体检查从 prop.GetValue(entity)
返回的内容。这是 null
(并且尝试调用 ToString()
是不可能的)或者您返回值类型(但装箱为对象),但您可以调用 normalToString()
方法。
if (IsNullableEnum(prop.PropertyType) && prop.GetValue(entity) != null)
memberProperty = Expression.Call(memberProperty, toStringMethod);
一般来说,您应该发出对 actual 类型方法的调用,而不是 Enum
。它适用于可空值类型和不可空值类型,包括 enum
s.
您可以在 GetMethod
调用中使用实际类型,或者(最好)使用 string methodName
重载 Expressing.Call
,例如
// (Test e) =>
var entityParameter = Expression.Parameter(typeof(Test), "e");
// e.strategy
Expression source = Expression.Property(entityParameter, "strategy");
// e.strategy.ToString()
var toStringCall = Expression.Call(source, "ToString", Type.EmptyTypes);