提升Boolean和out相结合的用户体验_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 提升Boolean和out相结合的用户体验

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

 2014/4/25 19:18:43  螺丝钉想要螺丝帽  博客园  我要评论(0)
  • 摘要:在我们编写代码的过程中经常有这样的需求,比如添加一条数据,我们想要的结果是如果添加成功了就返回true,如果添加失败了就返回false,在返回false的同时携带错误信息,我们通常的做法是定义这样的方法1publicboolAdd(stringname,outstringerror)虽然说这样写可以符合我们的需求,当是总觉得不对劲,而且很麻烦,在接收时还有定义一个接收error的变量,对于我们这些coder来说就是用户体验不好,于是我左思右想,写了个结构来提供这个用户体验,下面是结构代码
  • 标签:用户体验 用户 结合

class="p0" style="margin-top: 0pt; margin-bottom: 0pt;">在我们编写代码的过程中经常有这样的需求,比如添加一条数据,我们想要的结果是如果添加成功了就返回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 }

 

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

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

 

 

发表评论
用户名: 匿名