我们有一些遗留字符代码,希望将它们存储为新系统中的数字。为了提高开发人员进行迁移的代码的可读性和一般性理解,我想像这样进行枚举...

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:

10-02 02:59