创建Func <t,bool>在运行时</t,bool>

时间:2011-02-18 16:39:10

标签: c#-4.0 runtime boolean func

我有两个类:Role和CustomRole

public class CustomRole
{
    public string RoleName { get; set; }
    public int RoleId { get; set; }
}

public class Role
{
    public string RoleName { get; set; }
    public int RoleId { get; set; }
    public int MyRole { get; set; }
}

在编译时我有一个像这样的代表:

Func<CustomRole, bool> Del = o => o.RoleId > 0;

问题是在运行时我需要再创建一个具有相同条件但是表名已更改的委托

Func<Role, bool> Del1 = o => o.RoleId > 0;

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

你可以让Role和CustomRole实现一个包含RuleId属性的IRole接口,然后让你的委托使用IRole。

如果这不是一个选项,你可以看看鸭子打字。

答案 1 :(得分:2)

您可以通过使用反射获取属性值来实现此目的:

Func<object, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;

当您使用Entity Framework时,您也可以这样做:

Func<EntityObject, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;