Sim*_*mon 9 .net c# generics reflection
我需要验证一个对象,看它是否为null,值类型,或者IEnumerable<T>
where T
值是一个值类型.到目前为止,我有:
if ((obj == null) ||
(obj .GetType().IsValueType))
{
valid = true;
}
else if (obj.GetType().IsSubclassOf(typeof(IEnumerable<>)))
{
// TODO: check whether the generic parameter is a value type.
}
Run Code Online (Sandbox Code Playgroud)
所以我发现对象是null,值类型,或IEnumerable<T>
某些T
; 如何检查这是否T
是值类型?
Mar*_*ell 12
(编辑 - 添加值类型位)
您需要检查它实现的所有接口(注意它理论上可以实现IEnumerable<T>
多个T
):
foreach (Type interfaceType in obj.GetType().GetInterfaces())
{
if (interfaceType.IsGenericType
&& interfaceType.GetGenericTypeDefinition() == typeof(IEnumerable<>))
{
Type itemType = interfaceType.GetGenericArguments()[0];
if(!itemType.IsValueType) continue;
Console.WriteLine("IEnumerable-of-" + itemType.FullName);
}
}
Run Code Online (Sandbox Code Playgroud)