我正在尝试创建一个固定长度的var类型数组。我在我创建的var Linked List类中使用它。我知道我想要创建的数组的大小,不知道什么是正确的语法?
以下是代码:
public dynamic ToArray()
{
int counter = 0;
if (this.head == null)
return null;
else
counter = 1;
ListEntry i = this.head;
while (i.Next != null)
{
counter++;
i = i.Next;
}
var array = new[counter];
i = this.head;
for (int j = 0; j < array.Length; j++)
{
array[j] = i.Data;
i = i.Next;
}
return array;
}
这部分不起作用:
var array = new[counter];
任何帮助?
编辑:感谢大家的投入。我必须承认,当我发布时,我对语法糖的术语知之甚少。它现在更有意义。这篇文章背后的想法是创建一个可以处理基本值类型的动态Linked List类。
答案 0 :(得分:8)
我正在尝试创建var
类型的数组
var
不是类型,它只是implicit type definition
的语法糖。您需要指定数组类型:
var array = new YourType[counter];
使用var
,让编译器推断出类型。但在这种情况下,它的工作方式类似于快捷方式。当你不确定返回的类型时,它很有用。表达式或方法(例如,在使用LINQ
时它很有用。)
var array = new[counter];
在这一行中,如果你想创建一个可以包含任何类型元素的数组,你可以创建一个objects
或dynamic
的数组:
var array = new object[counter];
或者:
var array = new dynamic[counter];
答案 1 :(得分:0)
你可能想要这个:
var array = new dynamic[counter];
但是,我不确定您为什么要在此使用dynamic
并从您的方法中返回dynamic
。您可能已经知道ListEntry.Data
的类型 - 您可能希望返回该类型的数组。
答案 2 :(得分:0)
你需要指定一个数组类型,或者就像去一个甜蜜的商店并说“我可以有一个包”而不是说你想要什么类型,在这种情况下是编译器。要声明一个数组,你可以做
var array = new type[counter];
但是,您无法创建var数组,因为var不是类型,而是用于代替类型的关键字,如C ++ 11s auto。您必须为阵列定义特定类型,否则您将遇到问题。
对于您的情况,您需要dynamic
或object
数组。
var array = new dynamic[counter];
或
var array = new object[counter];