実行時にオブジェクトの型を派生しようとしています。具体的には、ICollectionかIDtoかの2つのことを知る必要があります。私はこれよりも良い方法がなければならない確信していますがジェネリックの使用時にタイプを比較するにはどうすればよいですか?
private static bool IsACollection(PropertyDescriptor descriptor)
{
bool isCollection = false;
foreach (Type type in descriptor.PropertyType.GetInterfaces())
{
if (type.IsGenericType)
{
if (type.GetGenericTypeDefinition() == typeof(ICollection<>))
{
isCollection = true;
break;
}
}
else
{
if (type == typeof(ICollection))
{
isCollection = true;
break;
}
}
}
return isCollection;
}
private static bool IsADto(PropertyDescriptor descriptor)
{
bool isDto = false;
foreach (Type type in descriptor.PropertyType.GetInterfaces())
{
if (type == typeof(IDto))
{
isDto = true;
break;
}
}
return isDto;
}
:現在、私は見つけることができた私の唯一の解決策はこれです。しかし、これはまだリフレクションを使用するときにリフレクションを使用しない場合、それは正常に動作失敗
if(descriptor.PropertyType == typeof(ICollection<>))
:私のような通常の方法で比較しようとしています。
私のエンティティのすべてのフィールドのインターフェイスを反復したくありません。誰かがこれを行う別の方法についていくつかの光を当てることができましたか?はい、私は時期尚早に最適化していますが、あまりにも醜いので、私をユーモアしてください。
警告は:
- これは、または>などのIList <として、一般的なこと>またはちょうど私がいるICollectionまたはICollectionを<を探していますので、なぜArrayListのことができませんでしたでした。ですから、私はICollectionを使用してテストするかどうかを知るために、if文でIsGenericTypeを使用する必要があると仮定します。<>事前に
ありがとう!
実際に彼は階層全体を通過しています。さらに、ICollection <>はICollectionを直接実装しません。 – Guvante
これはそうしました、私はこれらのコマンドの順序を逆転させました!私はtypeof(IList <>)を行っていました。IsAssignableFrom(typeof(ICollection <>))ありがとうございました! – joshlrogers
これは私のためには機能しませんでした。[別の質問](http://stackoverflow.com/q/18937119/122781)。 – HappyNomad