C#中通过ArrayList引用赋值数组时类型转换错误的解决方法
解决ArrayList中取出字符串数组时的类型转换错误
这个问题很常见,核心原因在于ArrayList是非泛型集合,它内部所有元素都会被当作object类型存储。当你尝试直接将arraysNames[i1]赋值给string[]类型的变量时,C#无法自动完成object到string[]的隐式转换,所以抛出了Cannot implicitly convert 'object' to 'string'的错误。
给你两种可行的解决办法:
方案一:显式强制类型转换
如果你坚持使用ArrayList,可以通过强制转换将object类型的元素转成string[]:
string[] currentArrayNames = (string[])arraysNames[i1];
⚠️ 注意:这种方式要求你确定arraysNames[i1]的实际类型确实是string[],否则运行时会抛出InvalidCastException异常。
方案二:使用泛型集合List<string[]>替代ArrayList(推荐)
从C# 2.0开始,泛型集合就已经替代了非泛型集合的主流地位,它类型安全、性能更好,还能避免手动转换的麻烦。修改你的代码如下:
public static string[] traitNames = { "Happiness", "Respect", "Authority" }; // 假设suppliesNames是同类型的string[]数组 private List<string[]> arraysNames = new List<string[]> { traitNames, suppliesNames }; // 直接赋值,无需转换 string[] currentArrayNames = arraysNames[i1];
如果你的项目使用的是C# 10或更高版本,还可以用目标类型推断简化List的声明:
private var arraysNames = new List<string[]> { traitNames, suppliesNames };
内容的提问来源于stack exchange,提问作者Gabe Tucker
相关产品推荐
相关产品推荐

