문제

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