2

Role と CustomRole の 2 つのクラスがあります。

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;

問題は実行時に同じ条件でもう 1 つデリゲートを作成する必要がありますが、テーブル名が変更されています

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;

Entity Framework を使用しているので、おそらくこれも同様に実行できます。

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