我需要在下面有这个函数,如果枚举值是C,它只是在第二个lambda值中放置布尔值为真,而不是从用户属性中检索。
public static Expression<Func<User, bool>> IsValid(this Component.ValueEnum component)
{
return component switch
{
Component.ValueEnum.A => u:User => u.token.x.IsValid,
Component.ValueEnum.B => u:User => u.token.y.IsValid,
Component.ValueEnum.C => u:User => true,
_ => throw new ArgumentException($"unrecognized component {component}")
};
}
然而,当我尝试这样做时,它抛出异常:
系统。InvalidOperationException:无法确定u =>的序列化信息;真正的
我做错了什么?这可能吗?
更新1:
好的,我看到这行是不可能的:
Component.ValueEnum.C =比;u:用户=比;真正的
生成的Lambda被用来过滤User的集合,这是一个非法的操作。
为了简化,我删除了Expression作为返回类型。如果您需要的只是一个lambda函数,它接受User
并直接返回bool
或使用User
,那么以下代码更改可能会对您有所帮助-
public static Func<User, bool> IsValid(this Component.ValueEnum component)
{
return component switch
{
Component.ValueEnum.A => (User u) => u.token.x.IsValid,
Component.ValueEnum.B => (User u) => u.token.y.IsValid,
Component.ValueEnum.C => (User u) => true,
_ => throw new ArgumentException($"unrecognized component {component}")
};
}