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[]'.
为什么?这是错误的惯例/铸造?
答案 0 :(得分:6)
如果表达式实际上不是 那个类型,或者是兼容类型(或者有明确的转换),则无法将表达式转换为特定类型。
在这种情况下,数组不是string[]
- 它是object[]
。 可能是string[]
,这就是编译器允许你首先编写演员表的原因 - 但是在执行时CLR发现它只是{{1} }。
您是否希望数组中的每个元素都 为字符串?如果是这样,您应该单独投射每个元素。如果没有,你将不得不添加对object[]
的调用(或者将每个元素转换为字符串的其他方式) - 但要注意空值。
顺便说一句,空捕获块是一个真的坏主意。如果出现问题,你真的想要发生什么?你想以什么方式处理什么样的错误?要考虑的一些错误:
最后,我建议将ToString
放在for循环“标题”中,而不是放在块的末尾。
答案 1 :(得分:1)
尝试Array.ConvertAll
方法。
答案 2 :(得分:-1)
看这是有效的:
public Dictionary ArrayToDictionaryConverter(object [] objArray)
{
string [] strArray = Array.ConvertAll(objArray,Convert.ToString);
字典字典= null;
尝试
{
dictionary = new Dictionary();
for(int iVal = 0; iVal&lt; strArray.Length;)
{
dictionary.Add(strArray [iVal],strArray [iVal + 1]);
iVal + = 2;
}
}
catch(Exception ex)
{
}
返回字典;
}