Can';t访问方法,因为它不易访问-c#

Can';t访问方法,因为它不易访问-c#,c#,forms,struct,C#,Forms,Struct,我正在用c编写一个表单,它必须访问包含结构的所有内部类。 我得到的错误如下: public frmSelectMusic(int mode, Module.MusicData data) { InitializeComponent(); switch (mode) { case 1: this.Text = "BGM"; compileList("BGM"); break;

我正在用c编写一个表单,它必须访问包含结构的所有内部类。 我得到的错误如下:

public frmSelectMusic(int mode, Module.MusicData data)
{
    InitializeComponent();

    switch (mode)
    {
        case 1:
            this.Text = "BGM";
            compileList("BGM");
            break;
        case 2:
            this.Text = "BGS";
            compileList("BGS");
            break;
        case 3:
            this.Text = "ME";
            compileList("ME");
            break;
        case 4:
            this.Text = "SE";
            compileList("SE");
            break;
    }
    this.mode = mode;
    if (data.name != "")
    {
        if (objList.Items.Contains(data.name))
        {
            objList.SelectedItem = data.name;
            cmdVolume.Value = data.volume / 10;
            cmdPitch.Value = (data.pitch - 50) / 10;
        }
    }
}
这是模块:

internal class Module
{
    internal static string mainPath;
    internal static string projectPath;

    internal struct MusicData
    {
        public int type;
        public string name;
        public int volume;
        public int pitch;
    }
}

我错过了什么?我应该在模块中使用public而不是internal吗?

您的结构
MusicData
被定义为内部类
模块的内部结构

因此,如果函数的“路径”被“较低”的访问修饰符(内部)阻止,则无法访问公共内容

内部访问修饰符基本上授予同一程序集中的任何人访问权限,而公共访问修饰符授予每个人访问权限

因此,您要么需要将内部更改为public,要么将public更改为内部


阅读更多信息。

模块和模块.MusicData类是内部的,因此只能通过同一程序集中的代码看到,而frmSelectMusic构造函数是公共的,因此每个人都可以看到。此公共构造函数(每个人都可以看到)作为参数Module.MusicData结构,但每个人都无法看到,存在冲突。因此,您应该将frmSelectMusic构造函数更改为internal,或者将Module和Module.MusicData类更改为public。

它是否位于不同的命名空间中?MusicData结构是否位于不同的程序集中?如果是,您需要切换到public。否,两个文件位于同一名称空间中。@jeroenvanevel名称空间不相关。重要的是在同一程序集中定义类型(或使用InternalsVisibleTo属性定义的“朋友”程序集中)。