C# - 创建一个固定大小的'var'数组?

时间:2014-02-24 22:09:34

标签: c# arrays dynamic implicit-conversion

我正在尝试创建一个固定长度的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类。

3 个答案:

答案 0 :(得分:8)

  

我正在尝试创建var

类型的数组

var不是类型,它只是implicit type definition语法糖。您需要指定数组类型:

var array = new YourType[counter];

使用var,让编译器推断出类型。但在这种情况下,它的工作方式类似于快捷方式。当你不确定返回的类型时,它很有用。表达式或方法(例如,在使用LINQ时它很有用。)

var array = new[counter];

在这一行中,如果你想创建一个可以包含任何类型元素的数组,你可以创建一个objectsdynamic的数组:

 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。您必须为阵列定义特定类型,否则您将遇到问题。

对于您的情况,您需要dynamicobject数组。

var array = new dynamic[counter];

var array = new object[counter];