首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么类型不能直接进行比较(通过"T1 == T2")?

为什么类型不能直接进行比较(通过"T1 == T2")?
EN

Stack Overflow用户
提问于 2017-01-20 08:53:57
回答 1查看 100关注 0票数 1

我觉得这是个有点傻的问题但是..。

我知道,这是规矩,但不知道,为什么。对于两个名为T1 & T2的类型,我可以:

代码语言:javascript
运行
复制
if (typeof(T1) == typeof(T2))
...

,但不能直接前进:

代码语言:javascript
运行
复制
if (T1 == T2)

为什么?

EN

回答 1

Stack Overflow用户

发布于 2022-01-29 12:26:49

正如Joey所提到的,由于C#语言的语法,不能直接将类型名称(如T1T2 (或stringint等)用作表达式。请参考以下语法规范:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure

因此,表达式T1 == T2是无效的(从编译器的角度来看)如下:

代码语言:javascript
运行
复制
if (string == int) // <-- what does that even mean? Shouldn't that always be false?
    Console.WriteLine("Hooray!");

由于类型名称没有任何附加的变量类型,所以必须使用typeof(...)语法从运行时获取类型表示(实际上,该语法返回System.Type类型的值)。

在允许T1 == T2时可能遇到的另一个问题是:

代码语言:javascript
运行
复制
struct t1 { }


void Main<T1, T2>()
{
    Type t1 = typeof(T1); // so far, so good.

    if (t1 == T2) // wait, I'm the compiler and I am confused right now.
                  // Is t1 a type or a variable of the type 'System.Type'?
        Console.WriteLine("Hooray!");
}

编译器应该如何处理这个代码片段?添加或删除结构T1将破坏Main函数的行为,从而在重新编译时破坏二进制兼容性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41759548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档