首页 > 编程语言 >C#中通用返回对象Result<T>(定义及使用)

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

时间:2024-08-30 14:53:59浏览次数:4  
标签:taxRate Console 定义 C# decimal static Result Error

 

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();
        }
结果:

 

 

 

标签:taxRate,Console,定义,C#,decimal,static,Result,Error
From: https://www.cnblogs.com/apple-hu/p/18388766

相关文章

  • 【ROS教程】编写launch文件
    @目录1.launch文件有哪些标签2.node标签2.1必选属性2.2可选属性2.3可选子级标签3.include标签3.1必选属性3.2可选属性3.3可选子级标签4.remap标签4.1必选属性5.param标签5.1必选属性5.2可选属性6.rosparam标签6.1必选属性6.2可选属性7.group标签7.1可选属性7.2可选子......
  • P7045 「MCOI-03」金牌
    题意简述给你\(n\)个数,你不知道每个数的权值。每次可以查询\(x,y\)表示查询\(x,y\)的权值是否相等,0是1否。你需要在\(2n-2\)次查询之内将这些数排成一个相邻两个数的权值不同的数列,并构造出来,或者报告无解。分析考虑在什么情况下会无解。如果存在一种数使得等于......
  • CSS、JS之滚动导航栏
    效果演示实现了一个滚动导航栏,包括一个固定在页面顶部的导航栏和四个全屏高度的区块。导航栏的背景颜色为半透明黑色,高度为60px,导航链接为白色,字体大小为30px,链接之间有15px的间距。当鼠标悬停在链接上时,下划线会出现。四个区块的背景颜色分别为#95e1d3、#eaffd0、#fce38a......
  • 两句话讲清楚离线安装docker
    两句话讲清楚离线安装docker目录两句话讲清楚离线安装docker写在前面解决方案写在前面背景:银河麒麟、离线环境,装吧,一装一个不吱声。参考链接:https://blog.csdn.net/zhaogangyyxf/article/details/141328640准备:docker安装包:文件类型是一个压缩包。一般是要去docker......
  • C# 面向对象的7大原则之开闭原则(Open-Closed Principle,OCP)
    定义开闭原则(OCP):软件实体应对扩展开放,对修改关闭。通俗来讲就是,当需要进行扩展时,在不更改现有代码的前提之下,进行扩展。举例假设有一个动物发出声音的类为Animal,最初只有Dog(狗)和Cat(猫),后续需要新增Cow(牛);按照开闭原则,不应修改Animal类、Dog类或Cat类,而是创建新的Cow类,并在适......
  • C# 面向对象的7大原则之单一职责原则(Single Responsibility Principle,SRP)
    定义单一职责原则(SRP):一个类只能有一个引起它变换的原因。通俗来讲就是一个类只负责一个职责,若负责的职责太多,可能会由于其中一个职责的变化而影响其他职责。举例假设有一个Student,它既负责了学生的基本信息,又负责了学生平均成绩的计算,这就违反了单一职责原则。public......
  • 工作 6 年,@Transactional 注解用的一塌糊涂
    接手新项目一言难尽,别的不说单单就一个@Transactional注解用的一塌糊涂,五花八门的用法,很大部分还失效无法回滚。有意识的在涉及事务相关方法上加@Transactional注解,是个好习惯。不过,很多同学只是下意识地添加这个注解,一旦功能正常运行,很少有人会深入验证异常情况下事务是否能......
  • MYSQL实现Oracle中decode函数
    背景:写oracle脚本迁移mysql时,mysql不支持decode函数思路:理解decode函数使用方法及参数含义1、decode(expression,value,result1,result2)     理解:如果expression=value,则输出result1,否则输出result22、decode(expression,value1,result1,value2,result2,value3,res......
  • ChatGPT学习之旅 (10) 系统全球化小助手
    LOTO****示波器统计曲线和故障分析pass/fail测试虚拟示波器可以应用在工业自动化检测中,除了常规的检测波形和测量值参数以外,由多个行业客户定制和验证的统计曲线和故障分析(pass/fail)功能也为工业自动化检测带来极大的便利。(一)故障分析(pass/fail)的基础:统计曲线功能在信号检测的......
  • Cron表达式
    Cron表达式是一种用于描述定时任务执行时间的字符串格式,在Unix、Linux、MacOSX等操作系统中被广泛使用。它通过一系列的时间字段来描述一个定时任务应该在哪些时间点执行。它通常由6~7位组成,年份可以省略。每个时间字段都可以是数字、星号、逗号、减号、正斜杠和问号这些特殊字......