.net C#中的动态枚举

yrefmtwq  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(173)

假设我有这个枚举:

public enum DynamicItem
{
FirstItem=1,
SecondItem=2
}

字符串
有没有什么方法可以使枚举动态化,这样它的成员就可以来自数据库查询,也就是说,如果我将3/ThirdItem添加到数据库表中,那么枚举中的新项就可以使用了,这将起作用:

public class Example
{
public DynamicItem item = DynamicItem.ThirdItem
}

n6lpvg4x

n6lpvg4x1#

我很清楚你为什么要这样做,通常情况下,一个是在数据库和代码之间Map状态标志或类似的东西,但是没有办法做到这一点。
这样做也没什么意义--通常我们针对枚举值编码--你会针对什么编码呢?如果可以的话,如果它们在运行时消失了,因为它们从数据库中被删除了,你会得到运行时失败,这将违背C#的静态类型。

igsr9ssn

igsr9ssn2#

在某些情况下,使用类型 Package 整数可能很有用,例如

public readonly record struct DynamicItem(int Id)
{
    public static DynamicItem FirstItem { get; } = new(1);
    public static DynamicItem SecondItem { get; } = new(2);
    ....
}

字符串
这允许您使用友好的名称引用代码中的特定值,同时对未知值使用某些默认行为。
您需要考虑向后和向前兼容性。您不能再假设列出的值是唯一存在的值,并且您确实需要确保特定值不会用于表示不同版本中的不同内容。
Ofc,你的代码不能处理它不知道的项目。所以如果将来添加值,它们都将获得相同的默认行为。除非你向数据库添加额外的信息来描述它们应该具有的行为。即,你的"枚举"实际上只是一个类,possibly a polymorphic class

相关问题