分享一下我的【返回自定义返回值和错误信息】的方法
刚看了个帖子,那个LZ在鄙视用out和ref来返回错误信息。
好吧,其实out和ref我只是在调用一个方法有不少于1个返回值时又不想因此而创建一个类时才使用的。
下面讲下我目前使用的返回错误信息的方法:
在非UI界面的方法中,我会尽量不用catch来捕获异常,除非一些特殊情况,比如这个方法会进行很多个地方的修改,而在修改到其中某一条发现无法修改时需要回滚操作,才会用catch捕获住将修改回滚。但还是会抛出异常!
去年的一个项目中我使用了两种方法。具体原因不详细描述了,直接给大家看代码吧。
1.第一个作为程序内部的错误码返回。 -1 是正确的带有返回值的。可能有人觉得正确的干嘛抛出异常呢?
和项目的特殊性有关,这个软件是提供 lua api 的,lua需要将脚本中返回值传出只能通过这个方法,因为其他的方法已经被我自己做的 lua 虚拟机给拦截住了。在此不多讨论合理性,蛮复杂的。这个只是一个简易的自定义返回异常。
使用方法:只要在最外层代码 catch(CustomReturnCode crc) 就可以了。
public class CustomReturnCode : Exception { private int _code; public int Code { get { return _code; } } private string _message; public override string Message { get { return _message; } } public CustomReturnCode() : base() { } public CustomReturnCode(string message) : base(message) { _code = -1; _message = message; } public CustomReturnCode(int code, string message) { _code = code; _message = message; } public void SetReturnCode(int code, string message) { _code = code; _message = message; } }
//返回执行结果的枚举 public enum CommandResult { [Description("成功")] Success = 1, [Description("Url太长")] UrlTooLong = 2, }; //枚举功能辅助 public static class EnumHelper { public static string GetEnumDescription(object enumSubitem) { enumSubitem = (Enum)enumSubitem; string strValue = enumSubitem.ToString(); FieldInfo fieldinfo = enumSubitem.GetType().GetField(strValue); if (fieldinfo != null) { Object[] objs = fieldinfo.GetCustomAttributes(typeof(DescriptionAttribute), false); if (objs == null || objs.Length == 0) { return strValue; } else { DescriptionAttribute da = (DescriptionAttribute)objs[0]; return da.Description; } } else { return ""; } } }