c# - 为什么 typeof(int).ToString() 不是常量?

标签 c# compiler-errors switch-statement tostring typeof

我正在尝试这样做:

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/

相关文章:

c# - 抑制ASPX文件的生成错误

c - switch 还是 const table 更好? (嵌入式软件)

c# - 按钮点击不能正常工作

php - token 不匹配异常

c# - 需要实现推送通知将消息推送到桌面客户端(不是网络/浏览器)

c++ - 为什么我收到错误: “there is more than one default constructor” ?

java - 在 switch 语句中返回异常,然后抛出被调用的方法

c# - 带有静态字段的 Switch 语句

c# - 如何验证证书?

c# - AWS 环境中的 WCF UserNameTransport 错误 - 收到不安全或不正确保护的故障