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)
Jon*_*ase 19
我必须假设在字符串中添加一个字符不被认为是编译时常量,而是一个运行时操作.如果将FileExtensionSeparatorCharacter的类型更改为string,则编译就可以了.
const string FileExtensionSeparatorCharacter = ".";
const string BillingFileTypeExtension = FileExtensionSeparatorCharacter + "BIL";
Run Code Online (Sandbox Code Playgroud)