私はクラス内のプロパティを表すPropertyInfoの配列を持っています。これらの特性のいくつかは、タイプICollection<T>
であるが、Tは、特性を横切って変化する - 私はいくつかICollection<string>
有し、いくつかのICollection<int>
など私は知っているすべてがコレクションのタイプであるときに、TのタイプをC#Genericコレクションで見つけることができますか?
Iを容易にGetGenericTypeDefinition()メソッドを使用してタイプICollection<>
である特性を識別することができます型を取得することは不可能ですが、上の例のint型や文字型型のTを取得することは不可能です。
これを行う方法はありますか?あなたはそれがICollection<X>
だろう知っているが、Xがわからない場合は
IDocument item
PropertyInfo[] documentProperties = item.GetType().GetProperties();
PropertyInfo property = documentProperties.First();
Type typeOfProperty = property.PropertyType;
if (typeOfProperty.IsGenericType)
{
Type typeOfProperty = property.PropertyType.GetGenericTypeDefinition();
if (typeOfProperty == typeof(ICollection<>)
{
// find out the type of T of the ICollection<T>
// and act accordingly
}
}
ふざけんなよ!あなたは20秒ほど私を打ち負かす。私たちは十字架に投稿しました:-) – Steven
@スティーブン:ちょうどJon Skeetedがあります! –
typeOfPropertyではなく、genericDefinitionでGetGenericArgumentsを呼び出していました。私の見落としを訂正して、今はすべて正常です。私が削除したコメントにより、あなたのコメントは意味をなさないものになりました。 – Jason