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

C#跨类访问公共Dictionary时报CS0050可访问性不一致错误如何解决

错误原因

CS0050报错的核心是可访问性不一致:你将LoadAudioForm类中的noteValue字段设为public公开级别,但该字典的Value类型CachedSound的访问修饰符低于public(比如是默认的internal,或者定义在某个类内部的private/protected),导致外部访问noteValue时,无法识别返回的CachedSound类型,编译器直接阻断了这种不合规的定义。

修复方案

  • 方案1(最通用):将CachedSound类的访问修饰符改为public
    找到CachedSound的定义代码,将类声明修改为:

    public class CachedSound
    {
        // 原有类逻辑不变
    }
    

    若CachedSound是嵌套类,需要保证它的所有外层类的访问修饰符也为public。

  • 方案2(不希望对外暴露CachedSound时使用):降低noteValue的访问级别和CachedSound对齐
    比如CachedSound是internal级别的话,将noteValue的修饰符也改为internal:

    internal Dictionary<int, CachedSound> noteValue = new Dictionary<int, CachedSound>();
    

额外注意

你当前第二个类的调用写法默认把noteValue当成了静态字段,但你现有代码里noteValue是实例成员,直接用类名LoadAudioForm.noteValue访问会触发额外报错,需要二选一修改:

  1. 若需要全局共享同一个字典,将noteValue改为静态字段:
    // 修饰符加static
    public static Dictionary<int, CachedSound> noteValue = new Dictionary<int, CachedSound>();
    
  2. 若每个LoadAudioForm实例对应独立的字典,需要先获取到LoadAudioForm的实例对象,再通过实例访问:
    // 示例:假设已经拿到了LoadAudioForm的实例对象formInstance
    AudioPlaybackEngine.Instance.PlaySound(formInstance.noteValue[ne.NoteNumber + (Convert.ToInt32(nVelR) * 100)]);
    

内容的提问来源于stack exchange,提问作者Alexander Bunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:12:00