作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在数据库中有一些表。只取两个
1-Sports
2-Match<>
.......
In sports table there is columns SportType<br>
and In Match table there is column MatchType
选项 1:
我可以选择创建 SportType 和 MatchType 表
选项 2:
第二个选项是创建 SportType 和 MatchType 的枚举
有些人不喜欢选项 1,因为查询中有额外的连接
你的建议
我还需要在 DropDownLists 中显示 SportType 和 MatchType
最佳答案
在查找表和枚举或类似的代码内常量之间做出决定时,您需要考虑几个因素。这些因素中的主要问题是您有多大可能必须添加或修改任何这些值而不重新部署应用程序。
另一件要记住的事情是,如果您使用代码内值,您将不可能使用任何类型的代理键,因此如果您决定更改代码中某些内容的拼写,您可以创建数据库中数据不匹配的问题。
由于您还需要在下拉列表中显示这些类型,因此我建议不要使用裸枚举,因为显示 UI 友好版本(例如,单词之间有空格)会变得很笨拙。
最简单的替代方案是一个带有字符串常量的类:
public class SportType
{
public const string TeamSport = "Team Sport";
public const string IndividualSport = "IndividualSport";
}
一个更复杂的选项,但对于这个用例来说可能不是必需的,是使这些对象成为强类型的:
public class SportType
{
private readonly string _description;
private SportType(string description)
{
_description = description;
}
public static readonly SportType TeamSport = new SportType("Team Sport");
public static readonly SportType IndividualSport = new SportType("Individual Sport");
public static implicit operator SportType(string s)
{
return new SportType(s);
}
public static implicit operator string(SportType s)
{
return s._description;
}
// equality overrides etc.
}
这里的优点是您可以将这些值用作字符串
string sportType = SportType.TeamSport;
但您不必将变量和参数声明为裸字符串:
public void SetFavoriteSportType(SportType sportType)
同样,这些只是选项;最终归结为您的应用程序将如何部署以及这些数据的修改主题。
关于c# - C# 中的枚举是否可以用于替换查找表(例如 SportType、MatchType),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543763/
我是一名优秀的程序员,十分优秀!