我正在尝试这样做:
const string intType = typeof(int).ToString();
switch (typeof(MyT).ToString())
{
case intType:
{
return "int";
break;
}
...
}
但是编译器说:
error CS0133: The expression being assigned to 'intType' must be constant
据我所知,typeof
运算符在编译时起作用。那么,怎么了?
最佳答案
As I know, typeof operator works at compile-time.
你不知道因为知识必须真实。您从哪里得到 typeof
在编译时执行的想法?它产生一个非常量对象。而且无法保证 ToString
每次运行时都不会产生不同的字符串,因此也不能将其视为常量。
So, what's wrong?
你的推理是基于一个错误的信念。
C# 规范清楚地描述了表达式成为编译时常量所必须满足的条件。这些条件包括不包含任何 typeof
运算符或方法调用的表达式。
但是这里还有更大的问题。我假设 MyT
是一个泛型类型参数,这意味着您正试图打开一个泛型类型参数的值。这几乎总是错误的做法。
你到底想做什么?你真正想解决什么问题?因为到目前为止您展示的这段代码表明您正在沿着一条非生产性的路径去解决任何真正的问题。
关于c# - 为什么 typeof(int).ToString() 不是常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490130/