组合一个字符常量和一个字符串文字来创建另一个常量
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";
这些天我主要使用 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";