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
相关产品推荐
相关产品推荐

