2013-06-11 7 views
6

Ich verwende Delphi XE4. Ich versuche, eine Hilfsfunktion für TBytes zu definieren:Kann ich einen Datensatz Helfer für TBytes definieren?

var B: TBytes; 
    i: integer; 
begin 
    B := TBytes.Create(1,2,3); 
    i := B.GetLength; 

    if i <> Length(B) then 
    raise Exception.Create('Incorrect result'); 
end; 

ich außer dem Ergebnis für i3 ist aber es funktioniert nicht:

TBytesHelper = record helper for TBytes 
public 
    function GetLength: integer; 
end; 

function TBytesHelper.GetLength: integer; 
begin 
    Result := System.Length(Self); 
end; 

Wenn ich die neue Hilfsfunktion zu konsumieren versuchen. Ich beziehe mich auf TStringHelper definieren in SysUtils.pas, die ähnliche Konstrukt hat.

Gibt es etwas, was ich vermisse?

+0

Dieser Code wird nicht einmal in XE3 kompilieren. Fehler bei 'B.GetLength' mit' [dcc32 Error]: E2018 Datensatz, Objekt oder Klassentyp erforderlich'. Was ist "TBytes" in XE4? Ist es immer noch 'TArray '? Ich dachte nicht, dass Helfer mit generischen Typen verwendet werden könnten. –

+0

Ja. Es wird nicht in 'XE3' kompiliert. Deshalb verwende ich 'XE4' wie in meiner Frage angegeben. –

+0

Ich bot einige zusätzliche Informationen an, falls es sich als hilfreich erwies. Ich nehme an, du hast meinen Kommentar falsch verstanden. Vergiss es. Nebenbei sollten Sie die Frage delphi-xe4 sowie das allgemeine dephi-Tag markieren. Welches Debugging hast du bisher gemacht? –

Antwort

2

Dieses Problem wurde hier diskutiert: https://forums.embarcadero.com/thread.jspa?threadID=88409 In wenigen Worten - Sie können Ihre eigene Art definieren und mit einem Rekord Helfer verwenden:

type 
TMyBytes = array of Byte; 

TBytesHelper = record helper for TMyBytes 
    function GetLength: integer; 
end; 

Aber es funktioniert nicht mit TBytes in Delphi definiert. Die Unterstützung von Helfern für generische Typen wurde kürzlich hinzugefügt, es ist also wahrscheinlich eine Einschränkung der aktuellen Implementierung.

Verwandte Themen