提升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 }

 

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

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

 

 

转载于:https://www.cnblogs.com/zcylife/p/3689062.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值