NET 结果与错误处理利器 FluentResults
1.
在项目开发中,方法返回的结果(成功或失败)对我们开发来说很重要。传统方法,如通过异常来指示错误或使用特定的返回类型(如布尔值加输出参数),虽然有效,但可能缺乏直观性和灵活性。
FluentResults库应运而生,它以一种既流畅又富有表达力的方式,极大地优化了这一过程。通过使用FluentResults,能够以一种更加自然和易于理解的方式传递操作结果,包括成功状态、错误信息、警告以及额外信息,提高代码的可读性和可维护性。
这种方式不仅让错误处理更加集中和一致,还使得代码结构更加清晰,逻辑更加流畅。
2. 项目介绍
FluentResults 是一个在 .NET 环境中广泛使用的库,它提供了一种优雅的方式来处理方法执行的结果和错误。
使用 FluentResults,可以很容易地创建包含成功值、错误、警告或信息的对象,并通过链式调用来处理这些对象。
那么如何使用 FluentResults 来优雅地处理结果和错误信息呢?
3. 使用 FluentResults
3.1 1、安装 FluentResults
在项目中安装 FluentResults,可以通过 NuGet 包管理器来安装。在 Visual Studio 中也可以通过 NuGet 包管理器控制台输入以下命令:
Install-Package FluentResults
或者,在项目文件中添加 NuGet 包引用。

3.2 2、创建 Result 对象
使用 Result 类的静态方法来创建结果对象。Result 类提供了多种方法来创建不同类型的结果,例如成功、失败、带有警告或信息的成功等。
using FluentResults;
static void Main(string[] args)
{ var result = IsInteger(""); if (result.IsSuccess)
{
Console.WriteLine($"结果:{result.Value} ");
} else
{
Console.WriteLine($"结果:{result.Reasons[0].Message}|{result.Errors[0].Message}");
}
}public static Result IsInteger(string input)
{ // 假设输入为空或null,我们可以选择认为它不是数字
if (string.IsNullOrWhiteSpace(input))
{ return Result.Fail("输入为空或null,无法判断是否是数字");
} // 使用int.TryParse尝试将输入转换为整数
// 如果转换成功,out参数将包含转换后的值,方法返回true
// 如果转换失败,方法返回false
if (int.TryParse(input, out int result))
{ return Result.Ok(result);
} // 如果无法转换为整数,则认为输入不是数字
return Result.Fail("输入不是数字");
} 运行结果

通过使用Result 类我们可以看到,方法运行返回了标准的接口参数,包括IsSuccess,Message,Errors等参数,帮我们快速实现返回结构。
3.3 3、链式处理结果
FluentResults 允许你通过链式调用来处理结果,这使得错误处理和逻辑流程更加清晰和直观。
需要注意的是FluentResults 本身的 Result 类型并不直接提供 OnSuccess 和 OnFailure 这样的链式方法,因为这些方法可能是在 FluentResults 的某个版本中以扩展方法的形式添加的,或者是在基于 FluentResults 的自定义扩展中定义的。
自定义扩展类
////// Result 扩展方法 /// public static class ResultExtensions { ////// 成功回调 /// /// /// ///public static Result OnSuccess(this Result result, Action successAction) { if (result.IsSuccess) { successAction?.Invoke(); } return result; // 返回结果以支持链式调用 } /// /// 失败回调 /// /// /// ///public static Result OnFailure(this Result result, Action failureAction) { if (!result.IsSuccess && result.Errors!= null) { foreach (var error in result.Errors) { failureAction?.Invoke(error); } } return result; // 返回结果以支持链式调用 } }
自定义方法
////// 验证输入字符串是否为整数/// /// ///public static Result IsIntegerInfo(string input) { // 假设输入为空或null,我们可以选择认为它不是数字 if (string.IsNullOrWhiteSpace(input)) { return Result.Fail("输入为空或null,无法判断是否是数字"); } // 使用int.TryParse尝试将输入转换为整数 // 如果转换成功,out参数将包含转换后的值,方法返回true // 如果转换失败,方法返回false if (int.TryParse(input, out int result)) { return Result.Ok(); } // 如果无法转换为整数,则认为输入不是数字 return Result.Fail("输入不是数字"); }
调用示例
var result = IsIntegerInfo("")
.OnSuccess(() =>
{ // 处理成功的情况
Console.WriteLine("Success!");
})
.OnFailure(error =>
{ // 处理失败的情况
Console.WriteLine("Failed: " + error.Message);
}); // 注意:在 OnSuccess 或 OnFailure 中使用 result 变量可能不是安全的,
// 因为这些回调可能在这些回调执行之前就被修改了。
// 更好的做法是在 OnSuccess/OnFailure 的 lambda 表达式中使用局部变量。运行结果

在这个示例中定义了两个扩展方法 OnSuccess 和 OnFailure,它们分别接受成功和失败时要执行的回调函数。这些方法首先检查 Result 对象的状态,然后根据状态调用相应的回调函数。它们返回原始的 Result 对象,以支持链式调用。
请注意,示例是为了说明目的而简化的,并且可能不包含 FluentResults 库中实际可用的所有功能和优化。在实际应用中,应该查看 FluentResults 的文档和源代码,以了解提供的具体功能。
3.4 4、FluentResults 高级特性
FluentResults提供许多高级特性,如链式调用、自定义错误类型、以及包含额外数据和元数据的错误对象。
例如,可以使用Result.Fail的重载版本来包含更多的上下文信息
return Result.Fail("输入错误.").WithError("The input value must be greater than zero.");3.5 5、自定义 Result 类型
FluentResults 还支持通过继承 Result 类来创建自定义的结果类型,以便在结果中携带额外的数据或状态。
public class CommonResult
{ public Result Result { get; } public string MyData { get; } public CommonResult(Result result, string myData)
{
Result = result;
MyData = myData;
Console.WriteLine($"{nameof(CommonResult)}: {MyData}|{result}");
}
}调用示例
public static CommonResult DemoResult(string input)
{ bool isSuccess =false; string errorMessage = "输入的字符串不是数字"; string myData = "测试一下";
Result result = isSuccess ? Result.Ok() : Result.Fail(errorMessage); return new CommonResult(result, myData);
}运行结果

通过以上步骤,可以在 .NET 应用快速、方便的使用 FluentResults 来处理结果和错误。可以提高代码的可读性和可维护性,还可以使错误处理更加集中和统一规范。
4. 使用场景
- API 开发:在处理 HTTP 请求和响应时,FluentResults 构建清晰、一致和易于理解的错误响应。
- 业务逻辑验证:在执行业务逻辑验证时,FluentResults 可以验证多个错误,并一次性返回。
FluentResults 提供了丰富的 API,可以灵活使用,与现有的 .NET 代码库和框架集成,如 ASP.NET Core、Entity Framework 等,还可以与其他第三方库一起使用,以提供更全面的错误处理和结果功能。
如果你的项目中需要一种更好的方式来处理结果,并希望提高代码的可读性和可维护性,那么 FluentResults 是一个不错的选择。
提示:在享受本文内容的同时,请注意版权归属 徐州鑫坤机电设备有限公司https://www.xzxkjd.com如果您觉得有价值欢迎分享,但请务必注明出处,感谢您的理解,谢谢!
以下部分内容需要登录查看 立即登录
相关内容
- NET 结果与错误处理利器 FluentResults
- 供需裂口持续扩大:2025年铜价暴涨,产业链如何应对?
- 铜,新时代的“石油”?2025年价格狂飙背后的战略博弈
- 从能源革命到智能时代:2025铜价暴涨背后的全球新逻辑
- 铜价创历史新高!绿色转型与供需失衡背后的财富浪潮
- 2025铜价为何一飞冲天?三大核心驱动力深度解析
- 上海非急救出租服务全解析
- 深耕中考复读赛道 深圳深才教育为复读生搭建升学桥梁
- 阳光下的童年:那些被温暖照亮的纯真时光
- 群晖DSM7.0-7.21监控套件Surveillance Station 9.20-11289开心版60个许可证设置教程(无重启、无断流、无卡死、史上最完美)
- 云服务器+SD-WAN组网和域名DNS解析
- 在云主机上安装iKuai OS,实现SD-WAN组网,利用云主机80;443端口搭建企业网站。个人博客。让云主机当做你的堡垒机,实现数据本地化。
简体中文
繁體中文
English
Nederlands
Français
Русский язык
Polski
日本語
ภาษาไทย
Deutsch
Português
español
Italiano
한어
Suomalainen
Gaeilge
dansk
Tiếng Việt
Pilipino
Ελληνικά
Maori
tongan
ᐃᓄᒃᑎᑐᑦ
ଓଡିଆ
Malagasy
Norge
bosanski
नेपालीName
čeština
فارسی
हिंदी
Kiswahili
ÍslandName
ગુજરાતી
Slovenská
היברית
ಕನ್ನಡ್Name
Magyar
தாமில்
بالعربية
বাংলা
Azərbaycan
lifiava
IndonesiaName
Lietuva
Malti
català
latviešu
УкраїнськаName
Cymraeg
ກະຣຸນາ
తెలుగుQFontDatabase
Română
Kreyòl ayisyen
Svenska
հայերեն
ဗာရမ်
پښتوName
Kurdî
Türkçe
български
Malay
मराठीName
eesti keel
മലമാലം
slovenščina
اوردو
አማርኛ
ਪੰਜਾਬੀName
albanian
Hrvatski
Suid-Afrikaanse Dutch taal
ខ្មែរKCharselect unicode block name





