无法从对象数组转换为字符串数组

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)

为什么?是这个错误的惯例/铸造?

Jon*_*eet 6

如果表达式实际上不属于该类型,或者是兼容类型(或者存在显式转换),则无法将表达式强制转换为特定类型.

在这种情况下,阵列不是string[]- 它是一个object[].它可能是一个string[],这就是为什么编译器允许你首先编写演员 - 但在执行时CLR发现它只是一个object[].

你期望数组中的每个元素都已经一个字符串吗?如果是这样,您应该单独投射每个元素.如果没有,你将不得不添加一个调用ToString(或者将每个元素转换为字符串的其他方式) - 但要注意空值.

顺便说一下,空挡块是一个非常糟糕的主意.如果出现问题,你真的想要发生什么?你想以什么方式处理什么样的错误?要考虑的一些错误:

  • 如果其中一个键为空怎么办?
  • 如果你得到重复的密钥怎么办?
  • 如果输入数组有奇数个元素怎么办?

最后,我建议将i += 2for循环中的"header"放在块的末尾.