【发布时间】:2020-06-09 09:43:07
【问题描述】:
为什么编译器只会在 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' 是一个变量,但用作类型
【问题讨论】:
-
那里有很多位代码。你想解释哪一点?举个例子
const string a = "A".ToLower();- 好吧,上面的错误很清楚。 -
我怀疑stackoverflow.com/questions/7593377/…你对什么感兴趣?或者考虑使用
if而不是switch。或者考虑使用不区分大小写的Dictionary来允许从一个值映射到另一个值。 -
String case 必须是常量字符串,所以添加
.ToLower()是编译器错误。它抱怨“类型名称'A'不存在于类型'ClassificationIdentifiers.ClassificationIdentifiersChildren'中”的事实,而不是抱怨“预期的常量值”看起来像一个小的编译器错误 -
我怀疑 CS0426 实际上是 CS0118 的变体。因为你想要的东西是一个常数,所以它知道最后一个
.之前的所有内容都需要是一个类型才能实现。如果您不知道它需要一个常量,这似乎让您感到困惑,但从编译器的角度来看可能是有道理的。
标签: c#