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

 public bool Add(string name,out string error)

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

 public struct Can
{
private bool _isTrue; public string Error { get; set; } public static bool operator true(Can param)
{
return param._isTrue == true;
} public static bool operator false(Can param)
{
return param._isTrue == false;
} public static bool operator !(Can param)
{
return !param._isTrue;
} public static bool operator ==(Can arg1, bool arg2)
{
return arg1._isTrue == arg2;
} public static bool operator !=(Can arg1, bool arg2)
{
return !(arg1._isTrue == arg2);
} public static implicit operator Can(bool arg)
{
return new Can { _isTrue = arg };
} public static implicit operator bool(Can arg)
{
return arg._isTrue;
} public static implicit operator Can(string arg)
{
return new Can { _isTrue = false, Error = arg };
} public override bool Equals(object obj)
{
if (!(obj is Can))
return false; Can can = (Can)obj; return can._isTrue == this._isTrue && can.Error == this.Error;
} public override int GetHashCode()
{
return this._isTrue.GetHashCode() ^ this.Error.GetHashCode();
}
}

下面是用例代码:

 public static Can Add(int number)
{
if (number < )
return "number 不能小于0";
return true;
}

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

下面来看看测试结果:

 public static void Main()
{
Can can = Add(); if (can == true)
Console.WriteLine("添加成功"); if (!can)
Console.WriteLine(can.Error); can = Add(-); if (can)
Console.WriteLine("添加成功"); if (can == false)
Console.WriteLine(can.Error);
}

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

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

最新文章

  1. JS弹出模态窗口下拉列表特效
  2. android ContentObserver
  3. android四大组件之ContentProvider(二)
  4. 《AppletButtonEvent.java》
  5. [leetcode]_Add Two Numbers
  6. 国内外最全的asp.net开源项目 (转)
  7. Python:字典
  8. 高效JQuery编码
  9. Linux TCP连接数修改
  10. ●UVA 1608 Non-boring sequences
  11. [Swift]LeetCode467. 环绕字符串中唯一的子字符串 | Unique Substrings in Wraparound String
  12. 【python小练】0014题 和 0015 题
  13. 玩玩vs Git 中国版 Gitee
  14. mysql空间类型使用笔记
  15. jQuery基础(4)- 位置信息、事件流、事件对象、事件代理、jquery事件
  16. PICE(1):Programming In Clustered Environment - 集群环境内编程模式
  17. visio 的使用方法
  18. 前端-javascript-ECMAScript5.0
  19. Design Your Own Protocol In Five Minutes
  20. java面试题汇总(一)

热门文章

  1. 继续Python爬虫
  2. linux----ulimit 限制
  3. LeetCode_Integer to Roman
  4. linux下类似Bus Hound的工具
  5. jQuery之位置
  6. 携程SQL面试题忘大牛解答解决思路
  7. 使用 ServKit(PHPnow) 搭建 PHP 环境[图]
  8. Python load json file with UTF-8 BOM header - Stack Overflow
  9. SQL Server 2000 函数使用---CAST 和 CONVERT
  10. TRIZ系列-创新原理-32-改变颜色原理