gpt4 book ai didi

c# - C# 和 VB.NET 中枚举的区别

转载 作者:太空狗 更新时间:2023-10-29 22:17:58 34 4
gpt4 key购买 nike

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

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 :

11.2 Constant Expressions

A constant expression is an expression whose value can be fully evaluated at compile time. [...] The following constructs are permitted in constant expressions:

[...]

  • The following run-time functions:

    • Microsoft.VisualBasic.Strings.ChrW
    • Microsoft.VisualBasic.Strings.Chr, if the constant value is between 0 and 128
    • Microsoft.VisualBasic.Strings.AscW, if the constant string is not empty
    • Microsoft.VisualBasic.Strings.Asc, if the constant string is not empty

关于c# - C# 和 VB.NET 中枚举的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2065503/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com