我们希望将旧版字符代码存储为新系统中的数字。为了提高开发人员的代码的可读性和一般理解,我想做这样的枚举......
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#中做到这一点?还有更好的方法吗?
答案 0 :(得分:10)
方法调用不是常量表达式。试试这个:
public enum Status {
Open = 'O',
Closed = 'C',
Pending = 'P',
EnRoute = 'E'
}
AscW
在VB中工作的原因是它是VB编译器在编译时理解和评估的内部事物,并被编译器视为常量表达式。即使在VB中,Convert.ToInt32
也无效。
11.2常量表达式
常量表达式是一个表达式,其值可以在编译时完全计算。 [...] 在常量表达式中允许使用以下结构:
[...]
以下运行时函数:
Microsoft.VisualBasic.Strings.ChrW
Microsoft.VisualBasic.Strings.Chr
,如果常数值介于0到128之间Microsoft.VisualBasic.Strings.AscW
,如果常量字符串不为空Microsoft.VisualBasic.Strings.Asc
,如果常量字符串不为空
答案 1 :(得分:3)
试试这个:
public enum Status
{
Open = 'O',
Closed = 'C',
Pending = 'P',
EnRoute = 'E'
}