zoukankan      html  css  js  c++  java
  • 提升Boolean和out相结合的用户体验

    在我们编写代码的过程中经常有这样的需求,比如添加一条数据,我们想要的结果是如果添加成功了就返回true,如果添加失败了就返回false,在返回false的同时携带错误信息,我们通常的做法是定义这样的方法

     

    1 public bool Add(string name,out string error)

     

    虽然说这样写可以符合我们的需求,当是总觉得不对劲,而且很麻烦,在接收时还有定义一个接收error的变量,对于我们这些coder来说就是用户体验不好,于是我左思右想,写了个结构来提供这个用户体验,下面是结构代码:

     

     1 public struct Can 
     2     {
     3         private bool _isTrue;
     4 
     5         public string Error { get; set; }
     6 
     7         public static bool operator true(Can param)
     8         {
     9             return param._isTrue == true;
    10         }
    11 
    12         public static bool operator false(Can param)
    13         {
    14             return param._isTrue == false;
    15         }
    16 
    17         public static bool operator !(Can param)
    18         {
    19             return !param._isTrue;
    20         }
    21 
    22         public static bool operator ==(Can arg1, bool arg2)
    23         {
    24             return arg1._isTrue == arg2;
    25         }
    26 
    27         public static bool operator !=(Can arg1, bool arg2)
    28         {
    29             return !(arg1._isTrue == arg2);
    30         }
    31 
    32         public static implicit operator Can(bool arg)
    33         {
    34             return new Can { _isTrue = arg };
    35         }
    36 
    37         public static implicit operator bool(Can arg)
    38         {
    39             return arg._isTrue;
    40         }
    41 
    42         public static implicit operator Can(string arg)
    43         {
    44             return new Can { _isTrue = false, Error = arg };
    45         }
    46 
    47         public override bool Equals(object obj)
    48         {
    49             if (!(obj is Can))
    50                 return false;
    51 
    52             Can can = (Can)obj;
    53 
    54             return can._isTrue == this._isTrue && can.Error == this.Error;
    55         }
    56 
    57         public override int GetHashCode()
    58         {
    59             return this._isTrue.GetHashCode() ^ this.Error.GetHashCode();
    60         }
    61     }

     

    下面是用例代码:

    1 public static Can Add(int number)
    2 {
    3       if (number < 0)
    4           return "number 不能小于0";
    5       return true;
    6 }


    可以同时返回String类型和Boolean类型,返回String是默认的Boolean为false,主要是通过public static implicit operator Can(string arg)这个指针重写的。

    下面来看看测试结果:

     1 public static void Main()
     2 {
     3     Can can = Add(1);
     4 
     5     if (can == true)
     6         Console.WriteLine("添加成功");
     7 
     8     if (!can)
     9         Console.WriteLine(can.Error);
    10 
    11     can = Add(-1);
    12 
    13     if (can)
    14         Console.WriteLine("添加成功");
    15 
    16     if (can == false)
    17         Console.WriteLine(can.Error);
    18 }

    是不是很方便,嘻嘻。。。。

    如果大家有更好的方法,不妨拿出来分享下呗!

     

     

  • 相关阅读:
    C#使用表达式树实现对象复制
    用vbs将字符串复制到剪贴板
    C# 动态获取程序集信息
    关于ftp的主动模式(Active Mode)和被动模式(Passive Mode)
    %userprofile%\Local Settings文件夹拒绝访问怎么办
    在Winform框架的多文档界面中实现双击子窗口单独弹出或拖出及拽回的处理
    ABP VNext框架基础知识介绍(1)框架基础类继承关系
    ABP开发框架中分页查询排序的实现处理
    Vue&Element开发框架中增加工作流处理,工作流的各个管理页面的界面处理
    基于ABP开发框架的技术点分析和项目快速开发实现
  • 原文地址:https://www.cnblogs.com/zcylife/p/3689062.html
Copyright © 2011-2022 走看看