Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 创建函数<;T、 布尔>;运行时_C# 4.0_Runtime_Boolean_Func - Fatal编程技术网

C# 4.0 创建函数<;T、 布尔>;运行时

C# 4.0 创建函数<;T、 布尔>;运行时,c#-4.0,runtime,boolean,func,C# 4.0,Runtime,Boolean,Func,我有两类:角色和自定义角色 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;

我有两类:角色和自定义角色

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 Del=o=>o.RoleId>0;
问题是在运行时,我需要使用相同的条件再创建一个委托,但表名已更改

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

如何实现这一点?

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


如果这不是一个选项,您可以研究duck类型。

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

Func<object, bool> del = o => (int)o.GetType().GetProperty("RoleId").GetValue(o, null) > 0;
Func 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;
Func del=o=>(int)o.GetType().GetProperty(“RoleId”).GetValue(o,null)>0;

是的,这是一个很好的答案,但问题是角色类是由ORM(Ado.Entity FrameWork)生成的。我无法修改这个类