标签: tvalue

Delphi XE:我的TValue.Equals()在哪里?

在我看来,TValue中缺少一个强制性方法; TValue.Equals(TValue).

因此,比较2个TValues的快速和体面的方式,最好不使用TValue.ToString(),它允许变体,记录等之间的错误匹配.

delphi equality rtti tvalue

9
推荐指数
1
解决办法
1365
查看次数

使用TValue将字符串转换为枚举类型?

我想使用TValue将字符串转换为枚举类型,我用谷歌搜索但我没有找到如何做到这一点.

type 
  TEnumTest = (etFirst, etSecond);

var 
  D: TEnumTest;
begin
  D := StrToENumTest('etFirst');
end;

function StrToEnumTest(pStr:String):TEnumTest;
var 
  V: TValue;
begin
  V := TValue.From<String>(pstr);
  Result := V.AsType<TEnumTest>;
end;
Run Code Online (Sandbox Code Playgroud)

它不起作用.那肯定是我看不到的蠢事 - 但我没有找到它.我做错了什么?

我知道如何使用GetEnumValue.

编辑:@Warren,它在这里,因为这更容易发布代码:

  TEnumUtils = class
    class function GetAs<T>(pValor: String): T;
  end;

class function TEnumUtils.GetAs<T>(pValor: String): T;
var
  Tipo: PTypeInfo;
  Temp: Integer;
  PTemp: Pointer;

begin
   Tipo := TypeInfo(T);
   Temp := GetEnumValue(Tipo, pValor);
   PTemp := @Temp;
   Result := T(PTemp^);
end;
Run Code Online (Sandbox Code Playgroud)

用法:

type 
  TEnumTest = (etFirst, etSecond);

var 
  D: TEnumTest;
begin
  D := …
Run Code Online (Sandbox Code Playgroud)

delphi rtti delphi-2010 tvalue

5
推荐指数
2
解决办法
7853
查看次数

RTTI Delphi创建一个n维矩阵作为TValue

美好的一天,

TValue是Delphi-2010及更高版本的RTTI功能.

继我之前的问题之后,我曾尝试使用循环函数将TValue作为n维返回.矩阵(2D,3D,4D ...)

例如,此过程将显示n维矩阵(它将列出来自n维矩阵的所有元素作为TValue变量):

Procedure Show(X:TValue);
var i:integer;
begin
   if x.IsArray then
   begin
      for i:=0 to x.GetArrayLength-1 do
          show(x.GetArrayElement(i));
      writeln;
   end else
   write(x.ToString,' ');

end;
Run Code Online (Sandbox Code Playgroud)

我不明白如何创建一个函数来从TValue创建一个n维矩阵.例如,我需要一个Function CreateDynArray(Dimensions:整数数组; Kind:TTypeKind):TValue; 并且该函数将返回一个TValue,这是一个动态数组,如何包含dimenssions例如:

返回= CreateDynArray([2,3],tkInteger); 将返回TValue作为tkDynArray,如果我将显示(返回)将列出

0 0 0
0 0 0
Run Code Online (Sandbox Code Playgroud)

没有终止.从TValue我尝试创建一个具有n维度的DynArray

Procedure CreateArray(var Value:TValue; NewDimmension:integer; NewValue2Kind:TTypeKind; NewValue2:TValue; IsLast:Boolean);
var i:integer;
NewValue:TValue;
len:Longint;
begin
   If Value.IsArray then// we have components in this dimension
   begin
       for i:=0 to Value.GetArrayLength-1 do// list all
       begin
            NewValue:=Value.GetArrayElement[i];
            CreateArray(newValue,NewDimension,NewValue2Kind,NewValue2,IsLast);
            Value.SetArrayElement(i,NewValue);
       end;
   end;
end else …
Run Code Online (Sandbox Code Playgroud)

delphi matrix rtti delphi-2010 tvalue

4
推荐指数
1
解决办法
1776
查看次数

将 TValue 转换为 TDateTime

如何在 TDateTime 中转换 TValue?

我看到有 AsInteger、AsDouble 等方法,但 TDateTime 没有。

var
  c : TRttiContext;
  t : TRttiType;
  f : TRttiField;
  fieldValue : TValue;
  fieldDateValue : TDateTime;
begin
  c := TRttiContext.Create;
    t := c.GetType(Self.ClassType);
    for f in t.GetFields do begin
      fieldValue := field.GetValue(Self);
      //convert the TValue in TDateTime
    end;
end;
Run Code Online (Sandbox Code Playgroud)

delphi reflection tdatetime tvalue

2
推荐指数
1
解决办法
1040
查看次数

标签 统计

delphi ×4

tvalue ×4

rtti ×3

delphi-2010 ×2

equality ×1

matrix ×1

reflection ×1

tdatetime ×1