-1

我有一个将 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();

正是在尝试铸造时,我得到了一个例外。

4

4 回答 4

3

你得到这个异常是因为为了转换为字符串数组,元素本身也必须是字符串。不过,您可以使用 LINQ 来做到这一点:

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

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

于 2012-12-29T14:38:28.910 回答
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();
于 2012-12-29T14:37:25.803 回答
1
string[] winningNumber = al.Cast<object>.Select(x=>Convert.ToString(x)).ToArray();
于 2012-12-29T14:37:51.353 回答
1

您只需要在调用 ToArray 之前使用Enumerable.Cast

string[] winningNumber = al.Cast<string>().ToArray();
于 2012-12-29T14:40:40.453 回答