Red*_*wan 1 c# arrays string casting object
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;
}
Run Code Online (Sandbox Code Playgroud)
得到错误:
Unable to cast object of type 'System.Object[]' to type 'System.String[]'.
Run Code Online (Sandbox Code Playgroud)
为什么?是这个错误的惯例/铸造?
如果表达式实际上不属于该类型,或者是兼容类型(或者存在显式转换),则无法将表达式强制转换为特定类型.
在这种情况下,阵列不是string[]- 它是一个object[].它可能是一个string[],这就是为什么编译器允许你首先编写演员 - 但在执行时CLR发现它只是一个object[].
你期望数组中的每个元素都已经是一个字符串吗?如果是这样,您应该单独投射每个元素.如果没有,你将不得不添加一个调用ToString(或者将每个元素转换为字符串的其他方式) - 但要注意空值.
顺便说一下,空挡块是一个非常糟糕的主意.如果出现问题,你真的想要发生什么?你想以什么方式处理什么样的错误?要考虑的一些错误:
最后,我建议将i += 2for循环中的"header"放在块的末尾.