C#中的Can枚举可以用于替换查找表(例如SportType、MatchType)
本文关键字:例如 SportType MatchType 查找 替换 Can 中的 枚举 用于 | 更新日期: 2023-09-27 18:26:26
我在数据库中有一些表。只需要两个
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,因为查询中有额外的联接
的建议
我还需要展示SportType&DropDownLists中的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)
同样,这些只是选项;归根结底,这取决于应用程序将如何部署,以及这些数据将如何被修改。
我认为枚举方法的问题在于必须添加新的SportTypes和MatchTypes。如果您的下拉列表绑定到这些枚举,则每次它们更改时都必须重新部署