C#中通用返回对象Result<T>(定义及使用)

 

1. 定义返回对象

复制代码
// Result 对象是一种显式表示成功结果或失败的类型
    // 方法可以返回这个类 ,而不是引发异常。如果操作失败,则 Result 对象将包含错误消息或代码,但不包含异常
    public class Result<T>
    {
        public T Value { get; }
        public string Error { get; }
        public bool IsSuccess => Error == null;

        private Result(T value, string error)
        {
            Value = value;
            Error = error;
        }

        public static Result<T> Success(T value) => new Result<T>(value, null);
        public static Result<T> Failure(string error) => new Result<T>(default, error);
    }
复制代码

2. 函数中用Result做返回值

复制代码
 static void Main(string[] args)
        {
            var result = Divide(10, 0);
            if (result.IsSuccess)
            {
                Console.WriteLine($"Result: {result.Value}");
            }
            else
            {
                Console.WriteLine($"Error: {result.Error}");
            }
            Console.Read();
        }

        static Result<decimal> Divide(decimal dividend, decimal divisor)
        {
            if (divisor == 0)
            {
                return Result<decimal>.Failure("Cannot divide by zero.");
            }
            return Result<decimal>.Success(dividend / divisor);
        }
结果:

 

 
复制代码

3. 多种方法调用此Result做返回值

复制代码
 //功能函数1
static Result<decimal> CalculateTax(decimal amount, decimal taxRate)
        {
            if (taxRate < 0 || taxRate > 1)
            {
                return Result<decimal>.Failure("Invalid tax rate.");
            }
            return Result<decimal>.Success(amount * taxRate);
        }

 //功能函数2
        static Result<decimal> CalculateTotal(decimal amount, decimal taxRate)
        {
            var taxResult = CalculateTax(amount, taxRate);
            if (!taxResult.IsSuccess)
            {
                return Result<decimal>.Failure(taxResult.Error);
            }

            return Result<decimal>.Success(amount + taxResult.Value);
        }

//调用
 static void Main(string[] args)
        {
            var totalResult = CalculateTotal(100m, 0.05m);
            if (totalResult.IsSuccess)
            {
                Console.WriteLine($"Total Amount: {totalResult.Value}");
            }
            else
            {
                Console.WriteLine($"Error: {totalResult.Error}");
            }
            Console.Read();
        }
结果:

 

 
复制代码

 

posted @   apple-hu  阅读(276)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示