我需要验证一个对象,看它是否为null,值类型,或者IEnumerable
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. }
所以我发现对象是null,值类型,或IEnumerable
某些T
; 如何检查这是否T
是值类型?
(编辑 - 添加值类型位)
您需要检查它实现的所有接口(注意它理论上可以实现IEnumerable
多个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); } }