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

本文关键字:数组 转换 字符串 Object | 更新日期: 2023-09-27 17:50:17

我有一个方法接受一个ArrayList对象作为参数。

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

ArrayList包含7个随机数。因为它们是object类型,所以我认为将其转换为字符串应该没有问题。

这是我调用的方法

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();

在尝试强制转换时,我得到了一个异常。

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

出现此异常是因为为了转换为字符串数组,元素本身也必须是字符串。你可以用LINQ来做:

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

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

您只需要使用Enumerable。在调用ToArray

之前转换
string[] winningNumber = al.Cast<string>().ToArray();

变化

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();
string[] winningNumber = al.Cast<object>.Select(x=>Convert.ToString(x)).ToArray();