You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中如何使用Exit语句返回record记录类型的函数结果?

Delphi 记录类型通过Exit语句返回值的实现方案

语法修正说明

你示例代码中用分号分隔记录字段的写法是语法错误,无论哪个版本的Delphi,内联构造记录时字段参数都需要用逗号分隔。

适配不同版本的实现方式

1. Delphi 10.3 Rio 及以上版本

10.3版本开始原生支持内联记录构造语法,你可以直接用两种写法实现:

  • 命名字段传参写法,可读性更高:
function GetCount: TIntResult;
begin
  if not IsLoggedIn then
    Exit(TIntResult(Value: 0, Error: 'Not logged in')); 

  if not IsAdmin then
    Exit(TIntResult(Value: 0, Error: 'Not Admin')); 

  // 正常业务逻辑
  Result.Value := 100;
  Result.Error := '';
end;
  • 顺序传参写法,代码更简洁:
Exit(TIntResult(0, 'Not logged in'));

2. 低于10.3的旧版本Delphi

旧版本不支持内联记录构造,可选择以下两种替代方案:

方案1:临时变量中转

先给局部记录变量赋值,再将变量传入Exit:

function GetCount: TIntResult;
var
  LRet: TIntResult;
begin
  if not IsLoggedIn then
  begin
    LRet.Value := 0;
    LRet.Error := 'Not logged in';
    Exit(LRet);
  end;

  if not IsAdmin then
  begin
    LRet.Value := 0;
    LRet.Error := 'Not Admin';
    Exit(LRet);
  end;

  // 正常业务逻辑
  Result.Value := 100;
  Result.Error := '';
end;

方案2:自定义静态构造方法

给记录类型添加静态构造方法,调用后直接传入Exit,代码更整洁:

TIntResult = record
  Value: Integer;
  Error: String;
  class function Create(AValue: Integer; const AError: String): TIntResult; static;
end;

class function TIntResult.Create(AValue: Integer; const AError: String): TIntResult;
begin
  Result.Value := AValue;
  Result.Error := AError;
end;

// 调用处代码
function GetCount: TIntResult;
begin
  if not IsLoggedIn then
    Exit(TIntResult.Create(0, 'Not logged in'));

  if not IsAdmin then
    Exit(TIntResult.Create(0, 'Not Admin'));

  // 正常业务逻辑
  Result.Value := 100;
  Result.Error := '';
end;

内容的提问来源于stack exchange,提问作者Георгий Пугачев

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:39:01