当前位置:  开发笔记 > 编程语言 > 正文

我可以从C#中的const char初始化一个const字符串吗?

如何解决《我可以从C#中的constchar初始化一个const字符串吗?》经验,为你挑选了2个好方法。

我试图以某种方式做以下事情:

const char EscapeChar = '\\';
const string EscapeString = EscapeChar.ToString(); // or ("" + EscapeChar)

这不编译.有没有其他方法可以使它工作?



1> splattne..:

根据C#语言规范(第17.3和14.16节):

17.3常数

常量是表示常量值的类成员:可以在编译时计算的值.

14.16常量表达式

常量表达式是一个在编译时应完全计算的表达式.在表达式需要是常量的情况下,这通过使用常量表达式在语法中指示.[...] 常量表达式允许使用以下结构:

文字(包括空文字)

对类和结构类型的const成员的引用.

引用枚举类型的成员.

带括号的子表达式,它们本身是常量表达式.

如果目标类型是上面列出的类型之一,则转换表达式.

预定义的已检查和未选中的+, - ,!和〜一元运算符.

预定义的+, - ,*,/,%,<<,>>,&,|,^,&&,||,==,!=,<,>,<=和> =二元运算符,每个都提供操作数是上面列出的类型.

?:条件运算符.

sizeof表达式,前提是unmanaged-type是§14.5.12中指定的类型之一.

默认值表达式,前提是类型是上面列出的类型之一,或者类型是引用类型或已知为引用类型的类型参数(第25.7节).

常量表达式允许以下转换:

身份转换

数字转换

枚举转换

实现您想要的另一种方法是使用静态只读成员.Readonly成员在运行时进行评估,而不是在编译时进行评估.因此,您可以使用ToString()方法.

private static readonly EscapeString = EscapeChar.ToString();

注意:因为readonly字段可以在声明或类的构造函数中初始化,所以readonly字段可以具有不同的值,具体取决于所使用的构造函数.

这是一篇关于const和readonly成员之间差异的好文章.



2> Jon Skeet..:

我没有看到任何方式这样做,我同意这有点可惜 - 但你真的需要const而不是static readonly吗?后者将具有几乎相同的语义.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有