【发布时间】:2020-02-25 10:11:06
【问题描述】:
我是来自 python 背景的 C# 新手。我目前正试图在 codewars.com 上解决这个challenge。这是关于找到一个数字的所有除数。我尝试用以下方式编程,这已经是我在question中的代码的改进版本@
using System;
using System.Collections.Generic;
public class Kata
{
public static int[] Divisors(int n)
{
List<int> divisors = new List<int>();
int i = 2, biggest_divisor = n;
while (true)
{
if ( n % i == 0)
{
divisors.Add(i);
divisors.Add(n/i);
biggest_divisor = i;
}
if ( i > biggest_divisor)
break;
i++;
}
if (divisors.Count > 0)
{
divisors.ToArray();
return Array.Sort(divisors);
}
else
return null;
}
}
执行if (divisors.Count > 0) 时会产生以下错误
错误 CS1503:参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Array'
为什么还是会出现这个错误,我只是在使用列表中的方法。
【问题讨论】:
-
divisors.ToArray不会将当前列表转换为数组(这意味着实例可以更改其运行时类型),但它会创建一个新数组,方法会返回。所以你应该将ToArray的返回值分配给一个变量并在Sort中使用它。 -
不要为集合类型(数组、列表等)返回
null。而是返回一个空集。然后您可以删除> 0检查,因为您不必根据是否有任何项目做任何不同的事情。
标签: c# arrays list error-handling