InvalidCastException试图将Object []数组转换为字符串数组

时间:2012-12-29 14:34:22

标签: c#

我有一个将ArrayList对象作为参数的方法。

然后我尝试将此arrayList转换为字符串数组,但得到InvalidCastException。

ArrayList包含七个随机数。因为它们是类型对象,所以我认为它不应该成为将其转换为字符串的问题。

这是我称之为

的方法
p.matches(winningNumber);

public void matches(ArrayList al)
    {
        try
        {
            string nameFile;

            string[] winningNumber = (string[])al.ToArray(typeof(string));

            Console.WriteLine("Please enter the name of the file you want to Read from");
            nameFile = Console.ReadLine();

在施法时attemt我得到了一个例外。

4 个答案:

答案 0 :(得分:3)

您收到此异常是因为为了转换为字符串数组,元素本身也必须是字符串。但是你可以使用LINQ来实现:

string[] winningNumber = al.Cast<object>().Select(o => o.ToString()).ToArray();

要处理null,请将o.ToString()替换为""+o或检查null s的条件。

答案 1 :(得分:1)

更改

string[] winningNumber = (string[])al.ToArray(typeof(string));

string[] winningNumber = al.Cast<object>.Select(x=> x==null ? string.Empty : x.ToString()).ToArray();

如果您有一些不是字符串的项目,可以使用Enumerable.OfType。它将忽略非字符串类型。

string[] winningNumber = al.OfType<string>().ToArray();

答案 2 :(得分:1)

string[] winningNumber = al.Cast<object>.Select(x=>Convert.ToString(x)).ToArray();

答案 3 :(得分:1)

您只需在致电ToArray之前使用Enumerable.Cast

string[] winningNumber = al.Cast<string>().ToArray();