C# 尝试将列表转换为数组会产生“错误CS1503:参数1:无法从'System.Collections.Generic.list'转换为'System.array'”

C# 尝试将列表转换为数组会产生“错误CS1503:参数1:无法从'System.Collections.Generic.list'转换为'System.array'”,c#,arrays,list,error-handling,C#,Arrays,List,Error Handling,我是python背景的C语言新手。我目前正试图在codewars.com上解决这个问题。这是关于找到一个数的所有除数。我试着用下面的方法来编程,这已经是我在这方面的代码的改进版本了 当执行if divisors.Count>0时,会产生以下错误 错误CS1503:参数1:无法从“System.Collections.Generic.List”转换为“System.Array” 为什么会出现这个错误,我只是在使用列表中的方法。传递除数。ToArray;到那里去;它需要的是数组而不是列表 ToArr

我是python背景的C语言新手。我目前正试图在codewars.com上解决这个问题。这是关于找到一个数的所有除数。我试着用下面的方法来编程,这已经是我在这方面的代码的改进版本了

当执行if divisors.Count>0时,会产生以下错误

错误CS1503:参数1:无法从“System.Collections.Generic.List”转换为“System.Array”

为什么会出现这个错误,我只是在使用列表中的方法。

传递除数。ToArray;到那里去;它需要的是数组而不是列表

ToArray不会对除数进行变异,而是返回转换为数组结构的列表副本

因此:

应该是

if (divisors.Count > 0)
{
  var divisorsArray = divisors.ToArray();
  Array.Sort(divisorsArray);
  return divisorsArray;
}
错误应该消失了

顺便说一句,用边做边休息,而不是边做边休息

  divisors.ToArray(); 
创建一个新的int[]数组并将其丢弃。然后尝试将列表除数列表作为数组进行排序:


问题是ToArray方法返回一个数组,而不是转换数组中的对象

要解决此问题,您必须执行以下操作:

如果除数.计数>0 { var divs=除数.OrderBy.ToArray; 返回divs; }
我认为您的意思是将if语句的部分更改为“return Array.sortdivisiors.ToArray;”;。但是,这会产生错误CS0029:无法将类型“void”隐式转换为“int[]”这是不对的。Array.sort将返回void,但其方法应为int arraysok nevermind,并在编辑之前进行注释。我提到的错误仍然存在,这就是为什么我一个接一个地返回除数数组。Sort@madreflectionDo我必须知道每个方法吗?我不这么认为,你们在记事本上写c代码吗?如果我必须了解所有的公司,那么使用强类型语言有什么意义呢。c'mon.divisors.ToArray不会将当前列表转换为数组这意味着实例可以更改其运行时类型,但它会创建一个新数组,该方法将返回该数组。因此,您应该将ToArray的返回值赋给一个变量,并在Sort中使用它。对于集合类型数组、列表等,不要返回null。。而是返回一个空集。然后,您可以删除>0检查,因为您不必根据是否存在任何项目来执行任何不同的操作。是否需要在公共静态之前添加一些内容?此代码生成以下错误错误CS1061:“List”不包含“OrderBy”的定义,并且找不到接受“List”类型的第一个参数的可访问扩展方法“OrderBy”?是否缺少using指令或程序集引用?添加using System.Linq;在顶端
if (divisors.Count > 0)
{
  var divisorsArray = divisors.ToArray();
  Array.Sort(divisorsArray);
  return divisorsArray;
}
  divisors.ToArray(); 
  // divisors is List<int>, not expected int[] 
  return Array.Sort(divisors);
using System.Linq;

...

public static int[] Divisors(int n)
  {
    ...
    if (divisors.Count > 0)
    {
      // Order List, create an array from it and, finally, return the array
      return divisors.OrderBy(item => item).ToArray();
    }
    else
      //TODO: better return an empty array: return int[0]; 
      return null;
  }