Вопрос

Is there a way to check whether ParameterInfo is a Collection?

I have tried this:

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

but it does not work. Any ideas?

Это было полезно?

Решение

Try this:

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

(note that I've removed the GetElementType call and switched typeof(ICollection) and x.ParameterType)

Другие советы

Check out the method 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)));

It's easy to confuse a.IsAssignableFrom(b) vs b.IsAssignableFrom(a)!

@BartoszKP has the right answer.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top