使用ToLower()切换会导致错误CS0426类型''中不存在类型名称”

问题描述 投票:-1回答:1

为什么编译器只在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;
}

enter image description here

我认为与下面的错误"A".ToLower();case a.ToLower():有关。

const string a = "A".ToLower();

switch (classificationFileType)
{
    case a.ToLower():
        classification = ClassificationIdentifiers.ClassificationIdentifiersChildren.A;
        break;
}

CS0133分配给'a'的表达式必须为常数

CS0118'a'是一个变量,但像类型一样使用

enter image description here

c#
1个回答
0
投票

您的问题可以简化为以下内容:

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类型。


[我认为此功能只是规范的一个怪癖-我看不到对此有任何有用的需求。

© www.soinside.com 2019 - 2024. All rights reserved.