首页 > 其他 > 详细

提升Boolean和out相结合的用户体验

时间:2014-04-25 21:33:24      阅读:582      评论:0      收藏:0      [点我收藏+]

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

 

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

 

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

 

bubuko.com,布布扣
 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     }
bubuko.com,布布扣

 

下面是用例代码:

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


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

下面来看看测试结果:

bubuko.com,布布扣
 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 }
bubuko.com,布布扣

bubuko.com,布布扣

 

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

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

 

 

提升Boolean和out相结合的用户体验,布布扣,bubuko.com

提升Boolean和out相结合的用户体验

原文:http://www.cnblogs.com/zcylife/p/3689062.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!