[英]Unable to cast from object array to a string array
public Dictionary<string, string> ArrayToDictionaryConverter(object [] objArray)
{
string[] strArray = new string[objArray.Length];
strArray =(string[])objArray;
Dictionary<string, string> dictionary = null;
try
{
dictionary = new Dictionary<string, string>();
for (int iVal = 0; iVal < strArray.Length; )
{
dictionary.Add(strArray[iVal], strArray[iVal + 1]);
iVal += 2;
}
}
catch (Exception ex)
{
}
return dictionary;
}
出现错误:
Unable to cast object of type 'System.Object[]' to type 'System.String[]'.
为什么呢 这是错误的惯例/强制转换吗?
如果它实际上不是这种类型,或兼容的一个 (或有明确的转换),你不能将表达式转换为特定类型。
在这种情况下,数组不是string[]
,而是object[]
。 可能是string[]
,这就是为什么编译器允许您首先编写强制类型转换的原因-但在执行时,CLR发现它只是一个object[]
。
您是否希望数组中的每个元素都已经是字符串? 如果是这样,您应该只单独投射每个元素。 如果不是,则必须添加对ToString
的调用(或将其他每个元素转换为字符串的其他方式)-但要注意null值。
顺便说一句,空的捕获块是一个非常糟糕的主意。 如果出现问题,您真正想要发生什么? 您想以哪种方式处理哪种错误? 要考虑的一些错误:
最后,我建议将i += 2
放在for循环的“标题”中,而不是放在代码块的末尾。
尝试使用Array.ConvertAll
方法。
请参见运行。:公共字典ArrayToDictionaryConverter(object [] objArray){string [] strArray = Array.ConvertAll(objArray,Convert.ToString);
字典字典= null; 尝试{dictionary = new Dictionary(); for(int iVal = 0; iVal <strArray.Length;){dictionary.Add(strArray [iVal],strArray [iVal + 1]); iVal + = 2; }} catch(ex Exception){}返回字典; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.