不能隐式转换类型`double []`到`System.Collections.Generic.List <double>`</double>

时间:2012-11-09 15:39:52

标签: c# syntax for-loop double

我收到以下错误消息,其中包含以下代码。我认为数据类型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 个答案:

答案 0 :(得分:3)

不,列表不是数组,即使概念有些相似。 C#中的List<T>类实际上是使用幕后数组实现的。

如果要从数组中设置List,可以使用以下内容:

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

将创建一个新List,并使用该数组初始化它。如果要将数组附加到现有列表,也可以使用AddRange的{​​{1}}方法,如下所示:

List

答案 1 :(得分:1)

您正在使用作业,如果使用单个值,则很难判断DivideByLength返回的内容:

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

否则,如果它返回一个数组,请尝试更改您的定义以允许该列表包含数组:

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

请注意,List不等同于double[]List具有许多简单数组不具备的功能。您可以通过查看两种不同的MSDN文章来查看差异,这些文章公开了哪些方法。

  • List
  • Array

    此外,您现在的for循环使用的是赋值。如果不对代码的那一部分进行更改,则只会将for循环的最后一次迭代分配给变量nbtemp(假设您删除了错误)

  • 答案 2 :(得分:1)

    您无法从Array转换为List,但您可以轻松调用:

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

    或者,由于您已经定义了列表,您还可以:

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

    答案 3 :(得分:0)

    他们都是IEnumerable实施者,但他们不是同等类型。您需要执行强制转换或方法调用。在上面的代码中我会说你需要:

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

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