我收到以下错误消息,其中包含以下代码。我认为数据类型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;
答案 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文章来查看差异,这些文章公开了哪些方法。
此外,您现在的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));