组合一个字符常量和一个字符串文字来创建另一个常量

Combine a character constant and a string literal to create another constant

这些天我主要使用 C# 编写代码,但多年来我一直使用 VB.NET 编写代码。在 VB 中,我可以组合一个字符常量和一个字符串文字来创建其他常量,这非常方便:

Const FileExtensionSeparatorCharacter As Char = "."c
Const BillingFileTypeExtension As String = FileExtensionSeparatorCharacter & "BIL"

现在我想在 C# 中做同样的事情:

const char FileExtensionSeparatorCharacter = '.';
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";

但这给了我一个编译器错误:

The expression being assigned to 'BillingFileTypeExtension' must be constant

为什么我不能在 C# 中执行此操作?

我必须在这里假设将字符添加到字符串不被视为编译时常量,而是一个 运行 时间操作。如果您将 FileExtensionSeparatorCharacter 的类型更改为字符串,您将可以正常编译。

const string FileExtensionSeparatorCharacter = ".";
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";

Is there a reason I can't do this in C#?

是的,但您不会喜欢它。 char + string 中涉及的字符串连接涉及在 char 上隐式调用 ToString()。这不是您可以在常量表达式中做的事情之一。

如果你把它们都变成字符串,那很好:

const string FileExtensionSeparator = ".";
const string BillingFileTypeExtension = FileExtensionSeparator + "BIL";

现在是 string + string 串联,可以出现在常量表达式中。

另一种方法是只使用 static readonly 字段:

const char FileExtensionSeparatorCharacter = '.';
static readonly string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";