如何检查给定类型是否为HTTP/1.1 301 Moved Permanently
Location: https://www.python.org//
Connection: Keep-Alive
Content-length: 0
的实现?
例如,假设我们有以下变量:
ICollection<T>
有没有办法确定ICollection<object> list = new List<object>();
Type listType = list.GetType();
是否为通用listType
?
我尝试了以下内容,但没有运气:
ICollection<>
当然,我可以做到以下几点:
if(typeof(ICollection).IsAssignableFrom(listType))
// ...
if(typeof(ICollection<>).IsAssignableFrom(listType))
// ...
但这仅适用于if(typeof(ICollection<object>).IsAssignableFrom(listType))
// ...
类型。如果我有ICollection<object>
则会失败。
答案 0 :(得分:7)
你可以这样做:
bool implements =
listType.GetInterfaces()
.Any(x =>
x.IsGenericType &&
x.GetGenericTypeDefinition() == typeof (ICollection<>));
答案 1 :(得分:1)
您可以尝试使用此代码,它适用于所有集合类型
public static class GenericClassifier
{
public static bool IsICollection(Type type)
{
return Array.Exists(type.GetInterfaces(), IsGenericCollectionType);
}
public static bool IsIEnumerable(Type type)
{
return Array.Exists(type.GetInterfaces(), IsGenericEnumerableType);
}
public static bool IsIList(Type type)
{
return Array.Exists(type.GetInterfaces(), IsListCollectionType);
}
static bool IsGenericCollectionType(Type type)
{
return type.IsGenericType && (typeof(ICollection<>) == type.GetGenericTypeDefinition());
}
static bool IsGenericEnumerableType(Type type)
{
return type.IsGenericType && (typeof(IEnumerable<>) == type.GetGenericTypeDefinition());
}
static bool IsListCollectionType(Type type)
{
return type.IsGenericType && (typeof(IList) == type.GetGenericTypeDefinition());
}
}