组合字符常量和字符串文字来创建另一个常量

问题描述 投票:0回答:3

我现在主要使用 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# 中执行此操作有什么原因吗?

c# .net vb.net vb.net-to-c#
3个回答
51
投票

我不能在 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";

19
投票

我必须在这里假设向字符串添加字符不被视为编译时常量,而是运行时操作。如果您将 FileExtensionSeparatorCharacter 的类型更改为字符串,您将可以正常编译。

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

0
投票

从.net 6.0开始,c#版本10引入了常量插值字符串(https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-10#constant-interpolated-strings )

因此,从 .net 6.0 开始,您可以使用以下命令来执行此操作:

const string BillingFileTypeExtension = $"{FileExtensionSeparatorCharacter }";
© www.soinside.com 2019 - 2024. All rights reserved.