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

        /// <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. Python中文繁简体转换工具

    Openccpy ___ _____ __ ___ ___ ___ _____ __ __ / __`\/\ '__`\ /'__`\/' _ `\ /'___\ /'___\/\ '__`\/\ \ ...

  2. 未能加载文件或程序集“Microsoft.Vbe.Interop, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c”或它的某一个依赖项。系统找不到制定的文件。

    未能加载文件或程序集"Microsoft.Vbe.Interop, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e ...

  3. mysql中的int和tinyint、varchar和char、DateTime和TimeStamp区别

    一.int和tinyint的区别 大小: tinyint在mysql中占用1个字节 即: 1 bytes = 8 bit ,一个字节最多可以代表的数据长度是2的8次方:11111111 = 256 在 ...

  4. 正式表达式判断私有 IP 地址

    正式表达式判断私有 IP 地址   ^1(((0|27)(.(([1-9]?|1[0-9])[0-9]|2([0-4][0-9]|5[0-5])))|(72.(1[6-9]|2[0-9]|3[01]) ...

  5. py3,休息时间玩点小把戏

    100以内奇数: ls = [x for x in range(100) if x % 2 == 1] 100以内偶数: ls = list(x for x in range(100) if x % ...

  6. [leetcode]332. Reconstruct Itinerary

    Given a list of airline tickets represented by pairs of departure and arrival airports [from, to], r ...

  7. ArcGIS API for JS 测量线长(各折线段)

    这里测量长度主要分为两个方面,一个是在绘制长折线段时,不仅需要显示总线段的长度,还要在各线段的中间显示各折线段的长度:另一个则是在绘制多边形时,不仅需要显示多边形的面积,还需要在各边的中间显示线段长. ...

  8. mysql 数据插入时的问题

    问题:在实现json串插入到数据库的时候发现中文utf-8传入的.但到数据中的时候反斜杠\就不见了,导致后面显示的时候也不能正常显示. 解决方法:comment=comment.replace(&qu ...

  9. iOS Simulator version 11 or later is currently not supported.

    iOS Simulator version 11 or later is currently not supported.You can open Xcode > Preferences > ...

  10. Android中 Git 使用中几个概念

    1.仓库(版本库) 版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史 ...