C++ cli 为什么要切换类型为';系统::Guid';这是违法的吗?
显然,大小写表达式不是常数。但是我想知道为什么不能在编译时知道guid?(我想这是个愚蠢的问题)C++ cli 为什么要切换类型为';系统::Guid';这是违法的吗?,c++-cli,switch-statement,typeid,C++ Cli,Switch Statement,Typeid,显然,大小写表达式不是常数。但是我想知道为什么不能在编译时知道guid?(我想这是个愚蠢的问题) 在一天结束时,您似乎必须使用叠瓦if-then-else对typeid进行测试,这是唯一的方法,对吗?在.NET的switch语句中只能使用字符串、整型类型和枚举。简单地说:CLR没有Guid的元数据表示形式。。。或者确实是DateTime或Decimal,就像其他明显的候选者一样。这意味着Guid没有常量表示,开关大小写必须是常量,至少在C#中是这样,我怀疑在C++/CLI中也是这样 现在这不一定
在一天结束时,您似乎必须使用叠瓦
if-then-else
对typeid
进行测试,这是唯一的方法,对吗?在.NET的switch语句中只能使用字符串、整型类型和枚举。简单地说:CLR没有Guid的元数据表示形式。。。或者确实是DateTime
或Decimal
,就像其他明显的候选者一样。这意味着Guid
没有常量表示,开关大小写必须是常量,至少在C#中是这样,我怀疑在C++/CLI中也是这样
现在这不一定是一个拦截器。。。C#允许通过一个伪造的常量十进制值,语言可以对GUI做同样的事情,然后允许您打开它们。毕竟,语言可以决定如何实现切换
我怀疑C++/CLI设计者认为这是一个非常罕见的用例,不值得让语言和编译器复杂化以支持它。由语言决定支持什么。您当然可以创建一种针对.NET的语言,它确实支持打开GUI。这对于C#switch语句来说是正确的。.net switch指令只能采用整数类型(枚举通过其整数值使用)。@Jon Skeet&@Jb Evain:但这将无法通过switch
MSIL指令实现。啊,这是有意义的。谢谢MetadataToken
属性对于打开类型不是更有用吗?
void Foo(Type^ type)
{
System::Guid id = type->GUID;
switch (id)
{
case System::Byte::typeid->GUID:
...
break;
...
}