简体   繁体   中英

How to tell if ParameterInfo type is a collection?

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?

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.

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 )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM