如何在 C# 中读取枚举 int 值(不通过转换转换)?

How to read enum int value (without converting via cast) in C#?

我有以下内容:

public enum SearchSex {
    All = 0,
    Male = 1,
    Female = 2,
    Other = 3
}

现在我有了这个,允许标志和位掩码:

public enum SearchSex {
    All = 1,
    Male = 2,
    Female = 4,
    Other = 8
}

在生产中,我希望所有设置在我们进行此更新时保持不变。所以我有一个脚本正在执行以下操作:

// for each user:  
user.SearchSex= (SearchSex)(Math.Pow(2, (Convert.ToInt32(user.SearchSex) - 1)));

我在想 Convert.ToInt32 会 return 数据库中的(旧)实际整数值,但它试图将整数值映射到枚举定义中定义的那些(新)整数值。即使不再定义任何相应的 Enum 值,我该如何按原样读取原始整数值?

为什么不直接在数据库上执行查询?像

UPDATE usertable SET SearchSex = POWER(2, SearchSex);

当然,我建议你先运行一个select查询。

SELECT *, Power(2, SearchSex) AS NewSearchSex FROM usertable;