![](/img/trans.png)
[英]Unity C# error: (12,47): error CS1503: Argument 2: cannot convert from 'System.Collections.Generic.List<UnityEngine.GameObject>' to 'float'
[英]Trying to convert list into array yields "error CS1503: Argument 1: cannot convert from 'System.Collections.Generic.List<int>' to 'System.Array' "
我是來自 python 背景的 C# 新手。 我目前正在嘗試在 codewars.com 上解決這個挑戰。 這是關於找到一個數字的所有除數。 我嘗試按以下方式對其進行編程,這已經是我在此問題中的代碼的改進版本
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();
創建一個新的int[]
數組並將其丟棄。 然后您嘗試將列表divisors
( List<int>
) 排序為數組:
// divisors is List<int>, not expected int[]
return Array.Sort(divisors);
並有編譯時錯誤。 讓我們對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;
}
通過divisors.ToArray();
到Array.Sort(HERE);
它期待一個Array
而不是一個List<T>
divisors.ToArray()
不會改變divisors
,而是返回轉換為Array
結構的列表副本。
所以:
if (divisors.Count > 0)
{
divisors.ToArray();
return Array.Sort(divisors);
}
應該
if (divisors.Count > 0)
{
var divisorsArray = divisors.ToArray();
Array.Sort(divisorsArray);
return divisorsArray;
}
錯誤應該消失了
順便說一句,使用 do-while 而不是 While(true) 並中斷。
問題是 ToArray() 方法返回一個數組,而不是轉換數組中的對象。
要解決該問題,您必須執行以下操作:
if (divisors.Count > 0)
{
var divs = divisors.OrderBy().ToArray();
return divs;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.