void Foo(Type^ type)
{
System::Guid id = type->GUID;
switch (id)
{
case System::Byte::typeid->GUID:
...
break;
...
}
显然 case 表达式不是恒定的。但我想知道为什么 GUID 在编译时无法得知? (我猜是个愚蠢的问题)。
归根结底,您似乎必须使用叠瓦式 if then else
来针对 typeid
进行测试,这是唯一的方法,对吧?
最佳答案
简单地说:CLR 没有 Guid
的元数据表示...或者实际上 DateTime
或 Decimal
,正如其他明显的候选者一样。这意味着 Guid
没有常量表示,并且 switch case 必须是常量,至少在 C# 中如此,我怀疑在 C++/CLI 中也是如此。
现在这没有成为一个阻碍...C#允许通过捏造的const十进制值,并且语言可以为Guids做同样的事情,并且然后允许您打开它们。毕竟,语言可以决定如何实现切换。
我怀疑 C++/CLI 设计者认为这是一个非常罕见的用例,不值得让语言和编译器复杂化来支持它。
关于c++-cli - 为什么 'System::Guid' 类型的 switch 表达式是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3299390/