You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows Forms中传递List<curso>及解决可访问性不一致错误

解决Windows Forms中集合传递的可访问性不一致问题

这个错误的根源其实很清晰——可访问性不匹配,咱们一步步来搞定它:

错误原因拆解

你写的curso类没有显式添加访问修饰符,在C#里,类默认的访问级别是internal(只能在当前程序集内部访问)。但你的aCurso窗体构造函数是public的,它的参数是List<curso>——这就产生了矛盾:一个对外公开的public方法(构造函数),却使用了一个访问级别更低的类型作为参数。编译器会认为:如果外部程序集想调用这个构造函数,根本无法识别curso类型,所以直接抛出了这个错误。

两种可行的解决方案

方案一:将curso类改为public访问级别

这是最通用的解决方式,适合后续可能需要在其他程序集访问curso类的场景。只需要给curso类加上public修饰符即可:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _18_05_18
{
    public class curso // 添加public修饰符
    {
        private string nombre;
        public curso(string nombre)
        {
            this.nombre = nombre;
        }
    }
}

方案二:将aCurso的构造函数改为internal访问级别

如果你的整个逻辑都只在当前程序集内运行,不需要外部程序集调用aCurso的构造函数,可以把构造函数的访问级别改成internal,和curso类的默认级别保持一致:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _18_05_18
{
    public partial class aCurso : Form
    {
        List<curso> cursos = new List<curso>();
        
        // 将public改为internal
        internal aCurso(List<curso> cursos)
        {
            InitializeComponent();
            this.cursos = cursos;
        }
    }
}

验证修改效果

两种方案修改完成后,你原来Form1里的调用代码不需要任何改动,就能正常把List<curso>集合传递给aCurso窗体了:

private void btnAC_Click(object sender, EventArgs e)
{
    Form f = new aCurso(cursos);
    f.Show();
}

简单总结一下:核心就是保证方法(构造函数)的访问级别,不能高于它所使用的参数类型的访问级别,两者匹配就不会再出现这个错误啦。

内容的提问来源于stack exchange,提问作者José

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:59:01