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

C#中的Can枚举可以用于替换查找表(例如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)

同样,这些只是选项;归根结底,这取决于应用程序将如何部署,以及这些数据将如何被修改。

我认为枚举方法的问题在于必须添加新的SportTypes和MatchTypes。如果您的下拉列表绑定到这些枚举,则每次它们更改时都必须重新部署

相关文章: