Browse Source

Istype no TValue.
Ajustado type cast com problemas.

Henrique Gottardi Werlang 4 years ago
parent
commit
e61df9571c
1 changed files with 16 additions and 1 deletions
  1. 16 1
      packages/rtl/rtti.pas

+ 16 - 1
packages/rtl/rtti.pas

@@ -57,6 +57,8 @@ type
     function AsUnicodeString: UnicodeString;
     function Cast(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean = True): TValue; overload;
     generic function Cast<T>(const EmptyAsAnyType: Boolean = True): TValue; overload;
+    function IsType(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean = True): Boolean; overload;
+    generic function IsType<T>(const EmptyAsAnyType: Boolean = True): Boolean; overload;
     function GetArrayElement(aIndex: SizeInt): TValue;
     function GetArrayLength: SizeInt;
     function IsArray: boolean;
@@ -615,6 +617,19 @@ begin
   Result := Cast(System.TypeInfo(T), EmptyAsAnyType);
 end;
 
+function TValue.IsType(ATypeInfo: TTypeInfo; const EmptyAsAnyType: Boolean): Boolean;
+var
+  AnyValue: TValue;
+
+begin
+  Result := TryCast(ATypeInfo, AnyValue, EmptyAsAnyType);
+end;
+
+generic function TValue.IsType<T>(const EmptyAsAnyType: Boolean): Boolean;
+begin
+  Result := IsType(System.TypeInfo(T), EmptyAsAnyType);
+end;
+
 function TValue.TryCast(ATypeInfo: TTypeInfo; out AResult: TValue; const EmptyAsAnyType: Boolean): Boolean;
 
   function ConversionAccepted: TTypeKinds;
@@ -626,7 +641,7 @@ function TValue.TryCast(ATypeInfo: TTypeInfo; out AResult: TValue; const EmptyAs
 
       tkEnumeration: Exit([tkInteger, tkEnumeration]);
 
-      else Exit([ATypeInfo.Kind]);
+      else Exit([TypeInfo.Kind]);
     end;
   end;