के लिए विफल रहता है मैं सही तुलनाकर्ता बनाने के लिए रिकॉर्ड फ़ील्ड के लिए प्रकार प्राप्त करने की कोशिश कर रहा हूं (किसी भी/लगभग किसी भी प्रकार के रिकॉर्ड के लिए सामान्य समाधान के रूप में)। मुझे स्थैतिक सरणी के लिए प्रकार की जानकारी नहीं मिल रही है:आरटीटीआई के साथ रिकॉर्ड फ़ील्ड प्राप्त करना स्थैतिक सरणी
TArrFieldTest = record
a: string;
b: array[0..3] of byte;
end;
procedure Test;
var
rttiContext: TRttiContext;
rttiType: TRttiType;
rttiFields: TArray<TRttiField>;
begin
rttiType := rttiContext.GetType(TypeInfo(TArrFieldTest));
rttiFields := rttiType.GetFields;
Assert(rttiFields[0].FieldType<>nil); // it's ok
Assert(rttiFields[1].FieldType<>nil); // fail here!
end;
फ़ील्डटाइप किसी भी प्रकार की स्थिर सरणी के लिए शून्य है। कोई विचार क्या गलत है? या शायद TArray/TDictionary आदि के साथ उपयोग किए जाने वाले रिकॉर्ड के लिए तुलनात्मक बनाने का आसान तरीका है?
यह शॉर्टस्ट्रिंग प्रकारों पर भी लागू होता है (और डेविड हेफरनन का समाधान उनके लिए भी काम करता है)। –