无法将受保护的枚举作为静态方法的参数传递

Jos*_*mez 0 c# access-modifiers class-visibility

我一直在更新公司的软件,偶然发现了这个问题.这个枚举是受保护的,我想从枚举中传递一个值作为静态方法的参数,但我不能导致我无法访问它,即使方法和枚举都在同一个类中.

例:

Class SomeClass
{    
    protected enum Car
    {
        Id
    };

    public static void AMethod(Car enumValue)
    {
        MessageBox.Show("This is an enum:" + enumValue.ToString());
    }  
}
Run Code Online (Sandbox Code Playgroud)

我不能使用它Car enumValue作为参数AMethod因为我无法访问它.为什么我不能这样做?我的意思是他们在同一个班级.我错过了什么吗?

ror*_*.ap 5

问题不在于你SomeClass看不到枚举.问题是你的枚举有一个protected访问修饰符,你试图在一个public方法中使用它(即你的课外可访问).您不能通过成员公开protected类型,public因为其他类中的方法在尝试调用时无法看到枚举AMMethod().

根据您打算如何使用此类,您需要更改其中一个,以便访问修饰符匹配:

public enum Car
{
    Id
};

public static void AMethod(Car enumValue)
{
    MessageBox.Show("This is an enum:" + enumValue.ToString());
}  
Run Code Online (Sandbox Code Playgroud)

要么:

protected enum Car
{
    Id
};

protected static void AMethod(Car enumValue)
{
    MessageBox.Show("This is an enum:" + enumValue.ToString());
}  
Run Code Online (Sandbox Code Playgroud)

后者只会阻止编译器错误,但可能是你希望 AMethod公开的情况,所以你应该选择前者.