1

クラスがあるとします(次のようなもの):

public class User
{
   public Guid Id { get; set;}
   public DateTime CreationDate { get; set; }
   public string Name { get; set; }
   public UserGroup Group { get; set; } 
}

.NET Framework の一部ではないすべてのプロパティ タイプを取得する方法はありますか。したがって、この場合、取得したいのはUserGroup? それは可能ですか?

私が思いつくことができる最高のものは次のようなものです:

IEnumerable<Type> types = typeof(User).GetProperties().Where(p => !p.PropertyType.Namespace.StartsWith("System.")).Select(t => t.PropertyType);

しかし、これはハックジョブのようです。重複した場合は申し訳ありません。そのようなものは見つかりませんでした。書式設定については申し訳ありません。

4

4 に答える 4

1

あなたが持っているものは、おそらくあなたが望むものに対して十分に信頼できると思います. ただし、柔軟性/読みやすさの観点から、プロパティ レベルで適用できる独自の属性タイプを定義する方がよい場合があります。

public class User
{
    public Guid Id { get; set; }
    public DateTime CreationDate { get; set; }
    public string Name { get; set; }
    [CustomProperty]
    public UserGroup Group { get; set; }
}

その後、リフレクションを使用して、この属性を持つすべてのプロパティをクエリできます。これにより、プロパティを含めたり除外したりできるようになります。


申し訳ありませんが、ドメイン エンティティを変更できないことを忘れていました。(属性を追加することはできません)。

MetadataTypeを使用して、基本クラスに属性を追加できます。

class UserMetadata
{
    ...
    [CustomProperty]
    public UserGroup Group { get; set; }
}

[MetadataType(typeof(UserMetadata)]
public class DomainUser : User
{
}
于 2013-04-30T09:41:44.467 に答える
0

あなたのアプローチは機能します。型が定義されているアセンブリをチェックすることもできます。たとえば、グローバル アセンブリ キャッシュから読み込まれたかどうかをチェックすることもできます。

bool wasLoadedFromAssemblyCache = typeof(T).Assembly.GlobalAssemblyCache;
于 2013-04-30T20:06:39.290 に答える