如何在C#中创建静态锯齿数组?避免重复生成对象
如何在C#中创建静态数组存储固定名称列表
问题场景
我需要将固定的名称列表存储在静态锯齿数组中,避免每次调用生成重复数据。最初尝试的写法不符合C#语法要求:
public static string[][] nameList = new string[10][] [{"name1_1","name1_2"},{"name2_1","name2_2"},{"name3_1","name3_2"}....];
当前使用的方法每次调用都会创建新对象,无法返回静态实例:
public static string[][] GetNameList() { string[][] nameList = new string[10][]; nameList [0] = new string[] { "name1_1", "name1_2" }; nameList [1] = new string[] { "name2_1", "name2_2" }; nameList [2] = new string[] { "name3_1", "name3_2" }; ............ return nameList; }
正确实现方案
方案1:静态锯齿数组的合法初始化
如果需要子数组长度不固定的锯齿数组,可直接在静态字段中完成初始化,搭配readonly确保只初始化一次:
public static readonly string[][] nameList = new string[10] { new string[] { "name1_1", "name1_2" }, new string[] { "name2_1", "name2_2" }, new string[] { "name3_1", "name3_2" }, // 剩余7个位置可按需赋值为null或空数组 };
方案2:静态二维数组(你找到的最优写法)
若每个子数组长度固定(比如都是2个元素),使用二维数组更简洁,同样通过static readonly保证静态且只读:
public static readonly string[,] UserList = new string[10, 2] { { "UsersId0_0", "UsersId0_1" }, { "UsersId1_0", "UsersId1_1" }, // 补充剩余8组数据 };
核心说明
static readonly修饰的字段在程序启动时仅初始化一次,不会重复创建对象,完全满足避免数据副本的需求。- 锯齿数组适合子数组长度不一致的场景,二维数组适合行列结构固定的场景,可根据实际需求选择。
内容的提问来源于stack exchange,提问作者A_Shah
相关产品推荐
相关产品推荐

