执行某个方法后, 一般都要对执行结果判断, 如果执行不成功, 还需要显示错误信息, 我先后使用了下面几种方式

        /// <summary>
/// 返回int类型结果, msg输出错误信息
/// </summary>
/// <param name="param">输入参数</param>
/// <param name="msg">错误信息</param>
/// <returns>0-成功, 其他值-失败</returns>
public int Foo(object param, out string msg);
        /// <summary>
/// 直接返回值(string)为空, 表示成功; 不成功的话, 输出错误信息
/// </summary>
/// <param name="param">输入参数</param>
/// <param name="result">结算结果</param>
/// <returns>null或者""(string.Empty)-成功, 非空-失败</returns>
public string Bar(object param, out object result);
        public struct Result
{
/// <summary>
/// 执行结果
/// </summary>
public int Code; /// <summary>
/// 错误信息
/// </summary>
public string Msg;
} /// <summary>
/// 直接返回Result结果, Result.Code表示执行结果, Result.Msg包含错误信息
/// </summary>
/// <param name="param"></param>
/// <param name="calculateResult"></param>
/// <returns>Result.Code表示执行结果, Result.Msg包含错误信息</returns>
public Result Baz(object param, out object calculateResult); public void Test()
{
object calculateResult;
var result = Baz(null, out calculateResult);
if (result.Code!=)
{
// ...
}
}

  第3种方法, 每次判断都需要键入Code, 有点麻烦, 可以使用C#的运算符重载简化一点点代码

     /// <summary>
/// 带结果代码和提示信息的结构体, 可以很方便的以结果代码(Code)与int比较, Code==0表示成功
/// </summary>
public struct Result
{
/// <summary>
/// 结果代码
/// </summary>
public int Code; /// <summary>
/// 提示信息
/// </summary>
public string Msg; #region 构造函数 public Result(string msgParam)
: this(-, msgParam)
{ } public Result(int codeParam, string msgParam)
{
Code = codeParam;
Msg = msgParam;
} #endregion #region 快速生成结构体
public static Result Pass { get { return new Result(); } } public static Result PassWithMsg(string msgParam)
{
return new Result() { Code = , Msg = msgParam };
} public static Result Fail(string msgParam)
{
return new Result(msgParam);
} //如果codeParam==0 的话, 强制变 -1
public static Result Fail(int codeParam, string msgParam)
{
codeParam = codeParam == ? - : codeParam;
return new Result(codeParam, msgParam);
}
#endregion #region 重载与int的比较 public static bool operator ==(int lhs, Result rhs)
{
return lhs == rhs.Code;
} public static bool operator !=(int lhs, Result rhs)
{
return lhs != rhs.Code;
} public static bool operator ==(Result lhs, int rhs)
{
return rhs == lhs;
} public static bool operator !=(Result lhs, int rhs)
{
return rhs != lhs;
}
#endregion #region 还得实现同类型的比较 public static bool operator ==(Result lhs, Result rhs)
{
return lhs.Code == rhs.Code;
} public static bool operator !=(Result lhs, Result rhs)
{
return lhs.Code != rhs.Code;
}
#endregion #region 按要求重载 Equals()和GetHashCode()两个方法, 完全以Code为比较值 public override bool Equals(object obj)
{
if (obj is int)
{
return this.Code == (int)obj;
}
if (obj is Result == false)
{
return false;
}
return this.Code == ((Result)obj).Code;
} public override int GetHashCode()
{
return this.Code.GetHashCode();
} #endregion #region int显示转换为Result结构(示例: Result result=(Result)0; ), 弃用这个的原因是: 当结果不为0时, 不能赋值Msg;
//public static explicit operator Result(int result)
//{
// return new Result() { Code = result };
//}
#endregion
}

  这样的话, 就不用每次都输入Code了

    class Program
{
static void Main(string[] args)
{
var result = PassMethod();
if (result==0) //直接与int比较
{
Console.WriteLine("PassMethod成功");
}
else
{
Console.WriteLine("PassMethod失败: "+result.Msg);
} result = FailMethod();
if (result == Result.Pass) //与Result类型比较
{
Console.WriteLine("FailMethod成功");
}
else
{
Console.WriteLine("FailMethod失败: " + result.Msg);
}
} public static Result PassMethod()
{
return Result.Pass;
} public static Result FailMethod()
{
return Result.Fail("Something is wrong");
}
}

C# 使用运算符重载 简化结果判断的更多相关文章

  1. 《挑战30天C++入门极限》C++中利用构造函数与无名对象简化运算符重载函数

        C++中利用构造函数与无名对象简化运算符重载函数 在完整描述思想之前,我们先看一下如下的例子,这个例子中的加运算符重载是以非成员函数的方式出现的: //程序作者:管宁  //站点:www.cn ...

  2. C++学习(12)—— 运算符重载

    运算符重载概念:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型 1.加号运算符重载 作用:实现两个自定义数据类型相加的运算 #include <iostream> #i ...

  3. 运算符重载+日期类Date

    Hello,一只爱学习的鱼 大学学习C++运算符重载的时候,老师出了一道"运算符重载+类"的综合练习题,让我们来一起看看吧! 题目: 设计一个日期类Date,包括年.月.日等私有成 ...

  4. C#高级编程笔记2016年10月12日 运算符重载

    1.运算符重载:运算符重重载的关键是在对象上不能总是只调用方法或属性,有时还需要做一些其他工作,例如,对数值进行相加.相乘或逻辑操作等.例如,语句if(a==b).对于类,这个语句在默认状态下会比较引 ...

  5. C++运算符重载

    C++运算符重载 基本知识 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和其后要定义的运算符号共同组成. 运算符可以重载为成员函数和非成员函数.当一个重载的运算符是成员函数时, ...

  6. 实验12:Problem H: 整型数组运算符重载

    Home Web Board ProblemSet Standing Status Statistics   Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...

  7. 【C++】运算符重载

    运算符重载,主要是简化类类型运算,能够让我们对类对象直接用运算符进行运算.基本语法: 类型 operator 运算符(参数列表){ ... } Complex operator+(Complex va ...

  8. [置顶] operator overloading(操作符重载,运算符重载)运算符重载,浅拷贝(logical copy) ,vs, 深拷贝(physical copy)

    operator overloading(操作符重载,运算符重载) 所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型).操作符重 ...

  9. Swift - 运算符重载和运算符函数

    让已有的运算符对自定义的类和结构进行运算或者重新定义已有运算符的运算规则,这种机制被称为运算符重载. 1,通过重载加号运算符,使自定义的两个坐标结构体对象实现相加: 1 2 3 4 5 6 7 8 9 ...

随机推荐

  1. jenkins部署web项目(不包含前后端分离)

    本次部署的是非常非常传统的web项目, jsp页面那种, 一 首先给tomact设置管理员用户和管理员密码,这类的教程网上有很多,在<tomcat-users><tomcat-use ...

  2. 关于Jupyter Notebook快捷操作

    Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输入模式.编辑模式,允许你往单元中键入代码或文本:这时的单元框线是绿色的.命令模式,键盘输入运行程序命令:这时的 ...

  3. 关键字new与malloc函数

    做题出bug,OJ说我没有定义new. 纳尼?new还需要定义?不都是直接用的吗,明明在自己的编译器里都可以通过的! 编译器:劳资是C++.... 一番倒腾后发现,我用的C++,但是OJ的编译器是C, ...

  4. JUnit4源码学习笔记

    先上一个在Spring-test下运行的调用栈 自底向上: JUnitStarter IDEA对JUnit的支持,调用JUnitCore.run(Runner),将注解@RunWith指定的Runne ...

  5. Django 命令

    django #安装: pip3 install django 添加环境变量 #1 创建project django-admin startproject mysite ---mysite ---se ...

  6. React props

    class WebSite extends React.Component { constructor() { super(); this.state = { name: "菜鸟教程&quo ...

  7. Java实现微信客户端扫码登录

    此篇文章记录自己开发中的微信客户端扫码登录的实例以及步骤,便于以后自行学习记起的关键,看到的网友有借鉴的地方就借鉴,看不懂的也请别吐槽,毕竟每个人的思维和思路以及记录东西的方式不一样: 1.首先需要一 ...

  8. Hive学习笔记记录

    典型数据来源: 文件管理服务: FTP文件服务:采用c/s模式,用户可以通过不同的客户端实现文件的上传与下载. NFS文件服务:借助于TCP/IP协议实现网络文件共享 Samba文件服务:是一种在局域 ...

  9. Mutex对象

    案例一 举一个例子,设计模式中的单例模式,记得当时做机房收费系统的时候就用的单例模式防止一个界面被实例多次,而Mutex对象能达到同样的效果,防止界面被实例化多次,起到控制线程的作用. 案例二 如果大 ...

  10. 【SVN】关于提交代码时的问题

    将项目上传到SVN弹出框提示One added/edited TODO item was found. Would you like to review it? 然后百度说这样解决: 造成这个原因是因 ...