为什么编译器仅在 switch 语句中为常量值调用方法时才会抱怨,为什么会出现错误The type name 'A' does not exist in the type
?
CS0426 类型中不存在类型名称“A”
'ClassificationIdentifiers.ClassificationIdentifiersChildren'
public static class ClassificationIdentifiers
{
public static class ClassificationIdentifiersChildren
{
public const string A = "A";
}
}
switch (classificationFileType)
{
case ClassificationIdentifiers.ClassificationIdentifiersChildren.A:
classification = ClassificationIdentifiers.ClassificationIdentifiersChildren.A;
break;
}
switch (classificationFileType)
{
case ClassificationIdentifiers.ClassificationIdentifiersChildren.A.ToLower():
classification = ClassificationIdentifiers.ClassificationIdentifiersChildren.A;
break;
}
我认为这与以下错误有关,"A".ToLower();
or case a.ToLower():
.
const string a = "A".ToLower();
switch (classificationFileType)
{
case a.ToLower():
classification = ClassificationIdentifiers.ClassificationIdentifiersChildren.A;
break;
}
CS0133 分配给“a”的表达式必须是常量
CS0118 'a' 是一个变量,但像类型一样使用
您的问题可以简化为以下内容:
public class Test
{
public const string C = "C";
public void M(string s)
{
switch (s)
{
case C.ToLower():
break;
}
}
}
其产生:
错误 CS0246:找不到类型或命名空间名称“C”(您是否缺少 using 指令或程序集引用?)
事情在case
标签是一个pattern,它可以是常量模式或递归模式。恒定的模式是这样的1
, "test"
,或 const 变量或字段的名称。
递归模式变得复杂,但这一个正在寻找一个ToLower
输入命名空间C
,它有一个空的解构函数。就像是:
public class Test
{
public void M(object s)
{
switch (s)
{
case C.ToLower():
break;
}
}
}
namespace C
{
public class ToLower
{
public void Deconstruct() { }
}
}
这就是为什么它抱怨无法找到类型或命名空间C
: 正在寻找一个ToLower
type.
我认为这有效的事实只是规范的一个怪癖——我看不出它有任何有用的需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)