Подтвердить что ты не робот

Объедините константу символа и строковый литерал для создания другой константы

Я код в С# в первую очередь в эти дни, но я кодировал в течение нескольких лет в VB.NET. В VB я мог бы комбинировать константу символа и строковый литерал для создания других констант, что очень удобно:

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

Теперь я хотел бы сделать то же самое в С#:

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

но это дает мне ошибку компилятора:

Выражение, присвоенное "BillingFileTypeExtension", должно быть константа

Есть ли причина, по которой я не могу сделать это на С#?

4b9b3361

Ответ 1

Есть ли причина, по которой я не могу сделать это на С#?

Да, но вам это не понравится. Конкатенация строк, участвующая в 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";

Ответ 2

Я должен здесь предположить, что добавление символа в строку не считается постоянной времени компиляции, а скорее операцией времени выполнения. Если вы измените тип FileExtensionSeparatorCharacter на строку, вы скомпилируете ее просто отлично.

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