簡體   English   中英

嘗試將列表轉換為數組會產生“錯誤 CS1503:參數 1:無法從 &#39;System.Collections.Generic.List 轉換<int> &#39; 到 &#39;System.Array&#39;&quot;

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM