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));