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 @ 2024-08-30 14:51  apple-hu  阅读(668)  评论(0)    收藏  举报