gpt4 book ai didi

delphi - 我可以定义只能包含这些值的 MyType 吗?

转载 作者:行者123 更新时间:2023-12-03 15:19:41 26 4
gpt4 key购买 nike

我遇到这个问题:例如,如果我有以下值:“AA”、“AB”、“AC”、“BC” - 我可以定义仅包含这些值的 MyType 吗?

我想在模式下做:

type MyType = ... ; // something
var X: MyType;
begin
x := 'AA' ; // is valid, 'AA' is included in X
X := 'SS' ; // not valid, 'SS' not is included in X, than raise an exception.
end;

如何解决?有没有直接使用类型数据的解决方案?

最佳答案

使用运算符重载实际上相当简单。

type
TMyType = record
private
type
TMyTypeEnum = (mtAA, mtAB, mtAC, mtBC);
var
FMyTypeEnum: TMyTypeEnum;
public
class operator Implicit(const S: string): TMyType;
class operator Implicit(const S: TMyType): string;
end;

implementation

class operator TMyType.Implicit(const S: string): TMyType;
begin
if SameStr(S, 'AA') then begin result.FMyTypeEnum := mtAA; Exit; end;
if SameStr(S, 'AB') then begin result.FMyTypeEnum := mtAB; Exit; end;
if SameStr(S, 'AC') then begin result.FMyTypeEnum := mtAC; Exit; end;
if SameStr(S, 'BC') then begin result.FMyTypeEnum := mtBC; Exit; end;
raise Exception.CreateFmt('Invalid value "%s".', [S]);
end;

class operator TMyType.Implicit(const S: TMyType): string;
begin
case S.FMyTypeEnum of
mtAA: result := 'AA';
mtAB: result := 'AB';
mtAC: result := 'AC';
mtBC: result := 'BC';
end;
end;

现在你可以做

procedure TForm1.Button1Click(Sender: TObject);
var
S: TMyType;
begin
S := 'AA'; // works
Self.Caption := S;

S := 'DA'; // does not work, exception raised
Self.Caption := S;
end;

关于delphi - 我可以定义只能包含这些值的 MyType 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8021205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com