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

时间:2009-12-31 07:36:53

标签: c# arrays string object casting

这是我的功能。

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[]'.

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

3 个答案:

答案 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)             {             }             返回字典;         }