gpt4 book ai didi

c# - 类(class);结构;枚举困惑,什么更好?

转载 作者:行者123 更新时间:2023-11-30 14:19:24 25 4
gpt4 key购买 nike

我有 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 属性中获取它。 switch 是使用哈希表实现的(如果有五个或更多值),因此查找速度非常快。

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 值时,它将在 default 大小写,因为该值与任何其他大小写都不匹配。)

关于c# - 类(class);结构;枚举困惑,什么更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2809124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com