合并字符常量和字符串文字以创建另一个常量

ror*_*.ap 19 .net c# vb.net vb.net-to-c#

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

Const FileExtensionSeparatorCharacter As Char = "."c
Const BillingFileTypeExtension As String = FileExtensionSeparatorCharacter & "BIL"
Run Code Online (Sandbox Code Playgroud)

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

const char FileExtensionSeparatorCharacter = '.';
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
Run Code Online (Sandbox Code Playgroud)

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

分配给'BillingFileTypeExtension'的表达式必须是常量

有没有理由我不能在C#中做到这一点?

Jon*_*eet 49

有没有理由我不能在C#中做到这一点?

是的,但你不会喜欢它.参与字符串连接char + string包括隐含调用ToString()char.这不是你在常量表达中可以做的事情之一.

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

const string FileExtensionSeparator = ".";
const string BillingFileTypeExtension = FileExtensionSeparator + "BIL";
Run Code Online (Sandbox Code Playgroud)

现在这是string + string连接,在常量表达式中很好.

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

const char FileExtensionSeparatorCharacter = '.';
static readonly string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
Run Code Online (Sandbox Code Playgroud)

  • @roryap:基本上它有不同的规则.我不熟悉VB规范,但C#5规范列出了7.19节中常量表达式中的操作. (4认同)

Jon*_*ase 19

我必须假设在字符串中添加一个字符不被认为是编译时常量,而是一个运行时操作.如果将FileExtensionSeparatorCharacter的类型更改为string,则编译就可以了.

const string FileExtensionSeparatorCharacter = ".";
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
Run Code Online (Sandbox Code Playgroud)