3

以下のコードで次のエラー メッセージが表示されます。List<double>データ型は同じだと思いましたdouble[]が、C# では、変数がオブジェクトとして機能するために最初の構文を使用してインスタンス化する必要がありました。私は何を間違っていますか、それとも私の考えは間違っていますか?

Cannot implicitily convert type `double[]` to `System.Collections.Generic.List<double>`

コード:

private void RunScript(List<Curve> crv, double nb, ref object DivPts)
  {

    List<double> nbtemp = new List<double>();
    List<double> Divpt = new List<double>();

    for(int i = 0; i < crv.Count;i = i + 2)
    {
      nbtemp = crv[i].DivideByLength(nb, true);
    }

    Divpt = nbtemp;
4

4 に答える 4

3

いいえ、概念は多少似ていますが、リストは配列ではありません。C#のList<T>クラスは、実際には舞台裏の配列で実装されています。

配列からリストを設定したい場合は、次のようなものを使用できます。

nbtemp = new List<double>(crv[i].DivideByLength(nb, true));

これにより、新しいリストが作成され、配列で初期化されます。次のように、配列を既存のリストに追加する場合は、 のAddRangeメソッドを使用することもできます。List

nbtemp.AddRange(crv[i].DivideByLength(nb, true));
于 2012-11-09T15:43:30.857 に答える
1

代入を使用しており、DivideByLength が何を返すかわかりにくい場合、単一の値を使用する場合:

nbtemp.Add(crv[i].DivideByLength(nb, true));

それ以外の場合、配列を返す場合は、リストに配列を含めることができるように定義を変更してみてください。

List<double[]> nbtemp = new List<double[]>();

Listと同等ではないことに注意してくださいdouble[]List単純な配列にはない多くの機能があります。メソッドが公開されている 2 つの異なる MSDN 記事を参照すると、違いがわかります。

  • リスト
  • 配列

    また、そのままの for ループは代入を使用しています。コードのその部分を変更しないと、for ループの最後の反復のみが変数 nbtemp に割り当てられます (エラーを削除したと仮定します)。

  • 于 2012-11-09T15:41:18.460 に答える
    1

    配列からリストに変換することはできませんが、簡単に呼び出すことができます:

    nbtemp = crv[i].DivideByLength(nb, true).ToList();
    

    または、すでにリストを定義する必要があるため、次のこともできます。

    nbtemp.AddRange(crv[i].DivideByLength(nb, true));
    
    于 2012-11-09T15:41:22.167 に答える
    0

    どちらもIEnumerable実装者ですが、同等の型ではありません。キャストまたはメソッド呼び出しを実行する必要があります。上記のコードでは、次のものが必要だと思います。

    nbtemp = (crv[i].DivideByLength(nb, true)).ToList();
    

    また

    nbtemp.AddRange(crv[i].DivideByLength(nb, true));
    
    于 2012-11-09T15:43:38.397 に答える