为什么编译器只在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();
或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变量或字段的名称。
Recursive patterns变得很复杂,但是这是在名称空间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
类型。
[我认为此功能只是规范的一个怪癖-我看不到对此有任何有用的需求。