当前位置 : 主页 > 编程语言 > c语言 >

c# – 班级;结构; Enum困惑,有什么更好的?

来源:互联网 收集:自由互联 发布时间:2021-06-25
我有46行信息,每行2列(“代码编号”,“描述”).这些代码将根据其初始提交请求的成功或失败返回给客户端.我不想使用数据库文件(csv,sqlite等)进行存储/访问.对于我希望如何向客户端显
我有46行信息,每行2列(“代码编号”,“描述”).这些代码将根据其初始提交请求的成功或失败返回给客户端.我不想使用数据库文件(csv,sqlite等)进行存储/访问.对于我希望如何向客户端显示这些代码,我能想到的最接近的类型是异常类.如果我错了,请纠正我,但是我可以告诉枚举不允许使用字符串,尽管这种结构最初基于它的工作方式似乎是更好的选择(例如100 =“请求中缺少名称”).

考虑到这一点,创建一个类可能是最好的运作方式.但是,我希望得到更多有经验的建议或指导以及那些可能处于类似情况的人的意见.

目前这就是我所拥有的:

class ReturnCode
{
    private int _code;
    private string _message;

    public ReturnCode(int code)
    {
        Code = code;
    }

    public int Code
    {
        get
        {
            return _code;
        }
        set
        {
            _code = value;
            _message = RetrieveMessage(value);
        }
    }

    public string Message { get { return _message; } }

    private string RetrieveMessage(int value)
    {
        string message;

        switch (value)
        {
            case 100:
                message = "Request completed successfuly";
                break;
            case 201:
                message = "Missing name in request.";
                break;
            default:
                message = "Unexpected failure, please email for support";
                break;
        }

        return message;
    }

}
最好的是一个类和一个枚举.然后,您可以拥有比“201”更多的描述性标识符.

一个结构也可以工作,但它们更难以正确实现,所以你应该坚持一个类,除非你出于某种原因特别需要一个结构.

您不需要在类中存储对消息的引用,您可以在Message属性中需要时获取该引用.使用哈希表(如果有五个或更多值)实现切换,因此查找速度非常快.

public enum ReturnIdentifier {
  Success = 100,
  MissingName = 201;
}

public class ReturnCode {

  public ReturnIdentifier Code { get; private set; }

  public ReturnCode(ReturnIdentifier code) {
    Code = code;
  }

  public string Message {
    get {
      switch (Code) {
        case ReturnIdentifier.Success:
          return "Request completed successfuly.";
        case ReturnIdentifier.MissingName:
          return "Missing name in request.";
        default:
          return "Unexpected failure, please email for support.";
      }
    }
  }

}

用法:

ReturnCode code = new ReturnCode(ReturnIdentifier.Success);

如果从某处获得整数代码,您仍然可以使用它,因为枚举器值对应于代码:

int error = 201;
ReturnCode code = new ReturnCode((ReturnIdentifier)error);

(如果整数代码与枚举中的任何标识符都不对应,那么转换仍然完全有效.获取Message值时,它将以默认情况结束,因为该值与任何其他情况.)

网友评论