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.