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

C#无法读取引用项目中的公开数组,调用时数组显示为空如何解决?

根因分析

你定义的cityNames是GlobalConst类的实例成员,未添加static修饰符,无法直接通过类名访问。如果没有实例化对象直接读取该字段,会出现编译报错或读取到空值的情况。

解决方案

方案1(推荐):修改全局常量类为静态类

全局常量类不需要实例化,直接将类和非const成员改为静态即可兼容原有调用逻辑:

namespace FoodPantryGlobals
{
    // 给类添加static修饰符
    public static class GlobalConst
    {
        public const string excelFileName = "Food Pantry Registry.xlsm";
        public const int cityNamesMembers = 4;
        // 给数组字段添加static修饰符
        public static readonly string[] cityNames = new string[cityNamesMembers] {"Hollans", "Roanoke", "Salem", "Vinton" };
    }
}

修改后无需调整调用端代码,即可正常读取数组内容。

方案2:实例化后访问(无需修改全局类代码)

如果不想改动全局类的定义,在调用端先实例化GlobalConst对象再读取数组:

using FoodPantryGlobals;

private void CboxCity_GotFocus(Object sender, EventArgs e)
{
    const int members = GlobalConst.cityNamesMembers;
    // 先实例化GlobalConst对象
    GlobalConst globalConst = new GlobalConst();
    int  index = 0;
    while (index < members)
    {
        // 通过实例对象读取数组元素
        string city = globalConst.cityNames[index];
        CboxCity.Items.Add(city);
        index = index + 1;
    }
}

额外排查项

如果修改后问题仍然存在,按以下步骤检查:

  • 确认RegisterInput项目对FoodPantryGlobal的引用是项目引用而非本地dll引用,如果是dll引用需要每次修改FoodPantryGlobal后手动替换最新编译的dll
  • 清理两个项目的编译缓存,右键解决方案选择「重新生成」,确保调用的是最新版本的类库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:15:03