Объедините константу символа и строковый литерал для создания другой константы
Я код в С# в первую очередь в эти дни, но я кодировал в течение нескольких лет в VB.NET. В VB я мог бы комбинировать константу символа и строковый литерал для создания других констант, что очень удобно:
Const FileExtensionSeparatorCharacter As Char = "."c
Const BillingFileTypeExtension As String = FileExtensionSeparatorCharacter & "BIL"
Теперь я хотел бы сделать то же самое в С#:
const char FileExtensionSeparatorCharacter = '.';
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
но это дает мне ошибку компилятора:
Выражение, присвоенное "BillingFileTypeExtension", должно быть константа
Есть ли причина, по которой я не могу сделать это на С#?
Ответы
Ответ 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";