2

我有两个类: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;

我怎样才能做到这一点?

4

2 回答 2

3

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

如果这不是一个选项,您可以查看鸭子类型。

于 2011-02-18T17:51:57.660 回答
2

您可以通过使用反射来获取属性值来实现这一点:

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

当您使用实体框架时,您也可以这样做:

Func<EntityObject, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;
于 2011-02-20T20:10:07.090 回答