У кого-либо есть быстрый отрывок или направление того, как я проверил бы, чтобы видеть, поддерживает ли данный класс>, = и <операторы?
Учитывая объект, переданный в, я ищу код, который реализует следующую логику:
If GetType(someObj).SupportsScalarComparisons() Then ...
Я не знаю, является ли это случаем для Отражения, или?Заранее спасибо.
Я подумал, что это интересный вопрос, поэтому решил использовать отражение, чтобы найти решение. (Я не знаю, есть ли другой способ, кроме отражения.)
Imports System.Reflection
Module MainModule
Sub Main()
'primitive, value type
If GetType(Integer).SupportsScalarComparisons Then
Debug.WriteLine("Integer supports comparisions")
Else
Debug.WriteLine("Integer does not support comparisions")
End If
'non-primitive, value type
If GetType(Decimal).SupportsScalarComparisons Then
Debug.WriteLine("Decimal supports comparisions")
Else
Debug.WriteLine("Decimal does not support comparisions")
End If
'non-primitive, object type
If GetType(Version).SupportsScalarComparisons Then
Debug.WriteLine("Version supports comparisions")
Else
Debug.WriteLine("Version does not support comparisions")
End If
'non-primitive, object type
If GetType(String).SupportsScalarComparisons Then
Debug.WriteLine("String supports comparisions")
Else
Debug.WriteLine("String does not support comparisions")
End If
'Integer supports comparisions
'Decimal supports comparisions
'Version supports comparisions
'String does not support comparisions
End Sub
Public Sub Dump(ByVal type As Type)
Dim oMethod() As MethodInfo = type.GetMethods(BindingFlags.Static Or BindingFlags.Public)
For Each o As MethodInfo In oMethod
Debug.WriteLine(o.Name)
Next
End Sub
End Module
Public Module TypeExtensions
<System.Runtime.CompilerServices.Extension()> _
Public Function SupportsScalarComparisons(ByVal obj As Type) As Boolean
Static Methods() As String = {"op_GreaterThan", "op_Equality", "op_LessThan"}
If obj.IsPrimitive Then
Return True
End If
For Each sMethodName As String In Methods
Dim oMethod As MethodInfo = obj.GetMethod(sMethodName, BindingFlags.Public Or BindingFlags.Static)
If oMethod Is Nothing Then
'does not support
Return False
End If
Next
Return True
'List is from MSDN Library index
'op_Addition
'op_BitwiseAnd
'op_BitwiseOr
'op_Decrement
'op_Division
'op_Equality
'op_ExculsiveOr
'op_Explicit
'op_False
'op_GreaterThan
'op_GreaterThanOrEqual
'op_Implicit
'op_Increment
'op_Inequality
'op_LogicalNot
'op_LessThan
'op_LessThanOrEqual
'op_Modulus
'op_Multiply
'op_OnesComplement
'op_Subtraction
'op_True
'op_UnaryNegation
'op_UnaryPlus
End Function
End Module
Попробуйте Catch, что бы вы не хотели сделать... если вы CATCH, то вы не сможете.