문제

TRTTIProperty.SetValue()는 특정 조건에 맞는 마지막 인스턴스이지만,경우에 제공되는 특정 조건에 맞는 마지막 인스턴스는 다른 유형을 기반으로 다음을 제공,일시겠습니까?

E.g.

TMyObject = class
published
  property StringValue: string read FStringValue write FStringValue;
end;

procedure SetProperty(obj: TMyObject);
var
  context: TRTTIContext;
  rtti: TRTTIType;
  prop: TRTTIProperty;
  value: TValue;
begin
  context := TRTTIContext.Create;
  rtti := context.GetType(TMyObject);
  prop := rtti.GetProperty('StringValue');
  value := 1000;
  prop.SetValue(obj, value);
end;

하려고 캐스팅 값을 문자열 작업을 하거나.

prop.SetValue(obj, value.AsString);
prop.SetValue(obj, value.Cast(prop.PropertyType.Handle));

어떤 아이디어에서 어떻게 이 문제를 해결?

업데이트:

일부는 당신이 왜 나는 할당 하려는 정수에는 문자열을,그리고 설명을 시도합니다.(사실,그것은 더 많이 내가 원하는 문자열을 지정의 정수,하지만 그는 관련...)

내가 무슨 노력을 달성하는 일반적인'중의 남자'간의 gui 및 모델입니다.고 싶어 어떻게든 후크는 텍스트 편집기 필드를 제공합니다.대신 이러한 중개자에 대한 각각의 모델에는 내가 기대하는 새로운온/형식에 대한 일을 것 어느니다.

나는 또한 새로운 제네릭,그래서 나는 확실하지 않다는 방법은 제네릭 도울 수 있습니다..그것은 가능한 인스턴스화하는 일반 런타임으로 동적으로 결정식,또는 컴파일을 알아야합니까?

E.g.

TMyGeneric<T> = class
end;

procedure DoSomething( );
begin
  prop := rtti.getProperty('StringValue');
  mygen := TMyGeneric<prop.PropertyType>.Create;
  //or
  mygen := TMyGeneric<someModel.Class>.Create;
end;

어쩌면 세 미만의 마술이 아직 오지...나중에 관리할 수 있습의 부부와 함께 큰 경우 구조...

도움이 되었습니까?

해결책

형식은 아닙니다.만 읽을 수 있습 데이터는"당신이"그것에 넣어.

형식.Cast 작동하지 않기 때문에 그것은 동일한 의미하는 암시적 입력 캐스트니다.할당할 수 없습니다 정수 문자열로 또는 그 반대입니다.하지만에 할당할 수 있는 정수를 떠나 당신에 할당할 수 있는 정수를 int64.

다른 팁

그것을 시도 할 수 없는 지금,하지만 나가:

  value := '1000'; 
  prop.SetValue(obj, value);

prop.SetValue(obj, value.ToString)

하지만 나를 위해 그것은 동일한 질문에 대한 프랑.왜 당신이 원하는 속성을 설정하는 값의 잘못된 데이터 형식?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top