繁体   English   中英

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM