C# 有没有办法将char作为常量来表示字符串?

C# 有没有办法将char作为常量来表示字符串?,c#,string,char,constants,C#,String,Char,Constants,如果我尝试 const char NoChar = (char)8470; //№ const char TmChar = (char)8482; //™ const string IdDisplayName = "Clements" + TmChar + ' ' + NoChar; 它将抛出编译错误: 分配给“{0}”的表达式必须是常量 据我所知,发生此错误的原因是,当字符是字符串连接运算符(+)在内部调用连接对象上的ToString时 我的问题是,是否有一种方法(非托管?)可以做到这一点

如果我尝试

const char NoChar = (char)8470; //№
const char TmChar = (char)8482; //™
const string IdDisplayName = "Clements" + TmChar + ' ' + NoChar;
它将抛出编译错误:

分配给“{0}”的表达式必须是常量

据我所知,发生此错误的原因是,当字符是字符串连接运算符(
+
)在内部调用连接对象上的
ToString

我的问题是,是否有一种方法(非托管?)可以做到这一点

我需要将该常量作为属性传递,它应该在客户端上生成


更难看的解决方法(根据您的答案,我们将看到什么更难看…)是将该属性子类化(该属性是密封的,必须进行一些反编译和复制粘贴工作),并将其作为非常量嵌入,这是可能的。

您可以通过
\u
转义直接在字符串中指定unicode字符值。So
const string IdDisplayName=“Clements\u2122\u2116”
应该可以满足您的需求。

我假设:

const string NoChar = "\x2116"; //№ - Unicode char 8470
const string TmChar = "\x2122"; //™ - Unicode char 8482
const string IdDisplayName = "Clements" + TmChar + " " + NoChar;

是不可接受的吗?

这篇文章可能会帮助你知道
2122==8482
的公式是什么?@Shimmy 2122是十进制数8482的十六进制(以16为基数)表示。我认为你的答案与()“常量表达式是一种可以在编译时完全计算的表达式。因此,引用类型的常量的唯一可能值是string和null。但我真的不明白什么是完全求值,OP中的连接不是在编译时完全求值的吗!?“完全评估”可能指的是最终的字符串,而不是在运行时最终成为一个字符串的片段!?感谢专家们对这一点的任何想法。因为当你制作
“string”+。。。对象连接…
,它在内部调用所有这些对象的
ToString
,然后连接字符串。现在很明显,
ToString
是一种运行时方法,可以被称为“const”。