2013-08-16 2 views
1

Есть ли способ проверить, является ли ParameterInfo коллекцией?Как определить, является ли тип ParameterInfo коллекцией?

Я попытался это:

ConstructorInfo[] constructorInfos = typeof(T).GetConstructors(); 
ConstructorInfo constructorInfo = constructorInfos[0]; 
ParameterInfo[] paramsVar = constructorInfo.GetParameters(); 
IEnumerable<ParameterInfo> collectionParams = paramsVar.Where(
    x => x.ParameterType.GetElementType() is ICollection); 

, но он не работает. Есть идеи?

ответ

2

Попробуйте это:

ConstructorInfo[] constructorInfos = typeof(T).GetConstructors(); 
ConstructorInfo constructorInfo = constructorInfos[0]; 
ParameterInfo[] paramsVar = constructorInfo.GetParameters(); 
IEnumerable<ParameterInfo> collectionParams = paramsVar.Where(
    x => typeof(ICollection).IsAssignableFrom(x.ParameterType)); 

(обратите внимание, что я удалил GetElementType вызов и переключился typeof(ICollection) и x.ParameterType)

+0

, что сделал, спасибо! – DevDave

+0

@BartoszKP там ya go ... Я никогда не помню порядок 'a.IsAssignableFrom (b)' vs 'b.IsAssignableFrom (a)' – allonhadaya

2

Отъезд метод Type.IsAssignableFrom:

ConstructorInfo [] constructorInfos = TypeOf (T) .GetConstructors(); ConstructorInfo constructorInfo = constructorInfos [0]; ParameterInfo [] paramsVar = constructorInfo.GetParameters(); IEnumerable collectionParams = paramsVar.Where ( x => x.ParameterType.GetElementType(). IsAssignableFrom (typeof (ICollection)));

Сложно смутить a.IsAssignableFrom(b) vs b.IsAssignableFrom(a)!

@BartoszKP имеет right answer.

+0

спасибо, что даст попробовать – DevDave

+0

все еще не повезло, что это не работает для меня – DevDave