我们有一些遗留字符代码,希望将它们存储为新系统中的数字。为了提高开发人员进行迁移的代码的可读性和一般性理解,我想像这样进行枚举...
Public Enum Status As Short
Open = AscW("O")
Closed = AscW("C")
Pending = AscW("P")
EnRoute = AscW("E")
End Enum
通过此设置,代码将是可读的(可以想象为
If Record.Status = Status.Open
),但是这些值将以较小的数字存储在数据库中,因此效率很高。但是...我是VB.NET专家,但是每个人都想用C#编写代码,因此我需要C#中的这种结构。谷歌搜索后,我发现
AscW
的一般.NET等效项是Convert.ToInt32("C")
。当我尝试在枚举中使用该语句时,出现编译器错误“需要常量表达式”。我该如何在C#中做到这一点?有没有更好的办法?
最佳答案
方法调用不是常量表达式。试试这个:
public enum Status {
Open = 'O',
Closed = 'C',
Pending = 'P',
EnRoute = 'E'
}
AscW
在VB中起作用的原因是,这是VB编译器在编译时理解和评估的内部事物,并且被编译器视为常量表达式。即使在VB中,Convert.ToInt32
也将不起作用。引用Visual Basic specification: