C# 无法将类型'double[]`隐式转换为'System.Collections.Generic.List<;双倍>`

C# 无法将类型'double[]`隐式转换为'System.Collections.Generic.List<;双倍>`,c#,syntax,for-loop,double,C#,Syntax,For Loop,Double,我收到以下错误消息,代码如下。我认为数据类型List与double[]相同,但C#要求使用第一个语法将其实例化,以便变量作为对象工作。我做错了什么,或者我的想法错了吗 Cannot implicitily convert type `double[]` to `System.Collections.Generic.List<double>` 无法将类型“double[]”隐式转换为“System.Collections.Generic.List”` 代码: private voi

我收到以下错误消息,代码如下。我认为数据类型
List
double[]
相同,但C#要求使用第一个语法将其实例化,以便变量作为对象工作。我做错了什么,或者我的想法错了吗

Cannot implicitily convert type `double[]` to `System.Collections.Generic.List<double>`
无法将类型“double[]”隐式转换为“System.Collections.Generic.List”`
代码:

private void运行脚本(列出crv、双nb、ref对象DivPts)
{
List nbtemp=新列表();
List Divpt=新列表();
对于(int i=0;i
您使用的是赋值,很难判断DivideByLength返回的值,如果是单个值,则使用:

nbtemp.Add(crv[i].DivideByLength(nb, true));
否则,如果返回数组,请尝试更改定义以允许列表包含数组:

List<double[]> nbtemp = new List<double[]>();
List nbtemp=new List();
请注意,
List
并不等同于
double[]
List
具有许多简单数组所不具备的功能。您可以通过查看公开方法的两个不同MSDN文章来了解这些差异。

  • 此外,您的for循环目前正在使用赋值。如果不更改代码的这一部分,您将只将for循环的最后一次迭代赋值给变量nbtemp(假设您删除了错误)

    您无法从数组转换为列表,但您可以轻松调用:

    nbtemp = crv[i].DivideByLength(nb, true).ToList();
    
    或者,由于您已经定义了列表,您还可以:

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

    不,列表不是数组,尽管概念有些相似。C#中的
    list
    类实际上是通过幕后数组实现的

    如果要从数组中设置列表,可以使用以下方法:

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

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

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


    拥有两个引用同一列表对象的
    List
    变量的目的是什么?@cdhowie,我认为这会更清楚,不是吗?它真的不清楚。令人困惑的是,为什么需要两个具有相同类型的局部变量来引用同一对象。列表是一个泛型集合A double[]是一个特定类型的对象数组
    double
    为什么要混合这两种类型?这两种类型不一样,甚至不相近,直到.NET Framework 2才有一种类型。0@JoelEtherton-一定要热爱到终点的比赛。:-)
    nbtemp = (crv[i].DivideByLength(nb, true)).ToList();
    
    nbtemp.AddRange(crv[i].DivideByLength(nb, true));