代码之家  ›  专栏  ›  技术社区  ›  elmattic

为什么“System::Guid”类型的开关表达式是非法的?

  •  2
  • elmattic  · 技术社区  · 16 年前
    void Foo(Type^ type)
    {
      System::Guid id = type->GUID;
      switch (id)
      {
      case System::Byte::typeid->GUID:
        ...
        break;
      ...
      }
    

    显然大小写表达式不是常量。但是我想知道为什么在编译时不能知道guid(我猜是个愚蠢的问题)。

    在一天结束时,它看起来你必须使用叠瓦 if then else 用于测试 typeid 这是唯一的办法,对吗?

    2 回复  |  直到 16 年前
        1
  •  3
  •   Jon Skeet    16 年前

    简单地说:CLR没有 Guid ... 或者确实如此 DateTime Decimal Guid

    现在不需要了 成为一个拦路虎。。。C#允许常量十进制值通过软糖,和语言 能够 对guid执行相同的操作,然后允许您打开它们。毕竟,语言可以决定如何实现切换。

    我怀疑C++和CLI设计师认为这将是一个非常罕见的用例,不值得语言和编译器复杂化。

        2
  •  1
  •   leppie    16 年前

    推荐文章