我们有遗留的字符代码,我们希望将其作为数字存储在新系统中.为了提高开发人员的代码的可读性和一般理解,我想做这样的枚举......
Public Enum Status As Short
Open = AscW("O")
Closed = AscW("C")
Pending = AscW("P")
EnRoute = AscW("E")
End Enum
Run Code Online (Sandbox Code Playgroud)
通过这种设置,代码将是可读的(想象If Record.Status = Status.Open),但是这些值将作为小数字存储在数据库中,因此它将是高效的.但是......我是VB.NET的人,但是每个人都想用C#编写代码,所以我需要在C#中使用这种结构.
谷歌搜索后,我发现的一般相当于.NET AscW是Convert.ToInt32("C").当我尝试在枚举中使用该语句时,我得到编译器错误"Constant Expression Required".
我怎么能在C#中做到这一点?有没有更好的办法?
Meh*_*ari 10
方法调用不是常量表达式.试试这个:
public enum Status {
Open = 'O',
Closed = 'C',
Pending = 'P',
EnRoute = 'E'
}
Run Code Online (Sandbox Code Playgroud)
AscW在VB中工作的原因是它是VB编译器在编译时理解和评估的内部事物,并被编译器视为常量表达式.即使在VB中,Convert.ToInt32也行不通.
11.2常数表达式
常量表达式是一个表达式,其值可以在编译时完全计算.[...]常量表达式允许使用以下结构:
[...]
以下运行时函数:
Microsoft.VisualBasic.Strings.ChrWMicrosoft.VisualBasic.Strings.Chr,如果常量值介于0和128之间Microsoft.VisualBasic.Strings.AscW,如果常量字符串不为空Microsoft.VisualBasic.Strings.Asc,如果常量字符串不为空