我现在主要在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#中做到这一点?
答案 0 :(得分:49)
我有没有理由在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";
答案 1 :(得分:19)
我必须假设在字符串中添加字符不被视为编译时常量,而是一个运行时操作。如果将FileExtensionSeparatorCharacter的类型更改为string,则编译就可以了。
const string FileExtensionSeparatorCharacter = ".";
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";