我有一个将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我得到了一个例外。
答案 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();