我现在主要使用 C# 编写代码,但多年来我一直使用 VB.NET 编写代码。在 VB 中,我可以组合字符常量和字符串文字来创建其他常量,这非常方便:
Const FileExtensionSeparatorCharacter As Char = "."c
Const BillingFileTypeExtension As String = FileExtensionSeparatorCharacter & "BIL"
现在我想在 C# 中做同样的事情:
const char FileExtensionSeparatorCharacter = '.';
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
但这给了我一个编译器错误:
分配给“BillingFileTypeExtension”的表达式必须是 常数
我不能在 C# 中执行此操作有什么原因吗?
我不能在 C# 中执行此操作有什么原因吗?
是的,但你不会喜欢它。
char + string
中涉及的字符串连接涉及在 ToString()
上隐式调用 char
。这不是您可以在常量表达式中执行的操作之一。
如果你把它们都做成字符串,那就没问题了:
const string FileExtensionSeparator = ".";
const string BillingFileTypeExtension = FileExtensionSeparator + "BIL";
现在这就是
string + string
连接,它可以出现在常量表达式中。
另一种方法是只使用
static readonly
字段:
const char FileExtensionSeparatorCharacter = '.';
static readonly string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
我必须在这里假设向字符串添加字符不被视为编译时常量,而是运行时操作。如果您将 FileExtensionSeparatorCharacter 的类型更改为字符串,您将可以正常编译。
const string FileExtensionSeparatorCharacter = ".";
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
从.net 6.0开始,c#版本10引入了常量插值字符串(https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#constant-interpolated-strings )
因此,从 .net 6.0 开始,您可以使用以下命令来执行此操作:
const string BillingFileTypeExtension = $"{FileExtensionSeparatorCharacter }";