I have System.Type object (retType). I get this with Reflection from my policy object that I pass in . How can I test to see if its enumerable? Any help would be most appreciated code is below.
Public Shared Function SerializeChanges(p As Model.Policy_2.Policy) As XmlDocument
Dim polProps As PropertyInfo() = p.GetType().GetProperties()
For Each pi As PropertyInfo In polProps
Dim retType As Type = pi.PropertyType
' This line belowthrows an error that IEnumerable is an Interface and cannot be used as an expression
If retType Is IEnumerable Then
'Do Stuff
End If
End Function
The following method is a generic method to check whether a given type inherits or implements another type:
Function InheritsOrImplements(child As Type, parent As Type) As Boolean
If child Is Nothing OrElse parent Is Nothing Then
Return False
End If
parent = resolveGenericTypeDefinition(parent)
If parent.IsAssignableFrom(child) Then
Return True
End If
Dim currentChild = If(child.IsGenericType, child.GetGenericTypeDefinition(), child)
While currentChild <> GetType(Object)
If parent = currentChild OrElse hasAnyInterfaces(parent, currentChild) Then
Return True
End If
currentChild = If(currentChild.BaseType IsNot Nothing AndAlso currentChild.BaseType.IsGenericType, currentChild.BaseType.GetGenericTypeDefinition(), currentChild.BaseType)
If currentChild Is Nothing Then
Return False
End If
End While
Return False
End Function
Function hasAnyInterfaces(parent As Type, child As Type) As Boolean
Return child.GetInterfaces().Any(Function(childInterface)
Dim currentInterface = If(childInterface.IsGenericType, childInterface.GetGenericTypeDefinition(), childInterface)
Return currentInterface = parent
End Function)
End Function
Function resolveGenericTypeDefinition(type As Type) As Type
Dim shouldUseGenericType = Not (type.IsGenericType AndAlso type.GetGenericTypeDefinition() <> type)
If type.IsGenericType AndAlso shouldUseGenericType Then
type = type.GetGenericTypeDefinition()
End If
Return type
End Function
Taken from https://github.com/shaynevanasperen/Quarks/blob/master/Quarks/TypeExtensions/InheritsOrImplements.cs
Usage:
InheritsOrImplements(retType, GetType(IEnumerable))
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.