如何在C#中返回一个数组文字

104

我正在尝试下面的代码。指出了出错的那一行。

int[] myfunction()
{
    {
      //regular code
    }
    catch (Exception ex)
    {                    
       return {0,0,0}; //gives error
    }
}

如何返回类似字符串字面量的数组字面量?


8
值得注意的是,C#实际上没有数组字面值,而是有一种数组初始化语法,也就是被接受的答案所提到的。字面值在特殊之处在于它们可以直接序列化,并且可以分配给const字段。但是,使用数组初始化语法则不行。 - cwharris
3个回答

203
返回一个像这样的 int 数组:
return new int [] { 0, 0, 0 };

你也可以隐式地对数组进行类型推断 - 编译器会推断它应该是int[],因为它只包含int值:
return new [] { 0, 0, 0 };

6
哇哦,我不知道你可以隐式地声明数组!+1 - Chris Sinclair
2
我发现 new int [] {0,0,0} 也可以工作。在我看来,这样更清晰明了。 - sgarg
3
那似乎与答案完全相同。我不同意,数组的隐式类型转换意味着将常量更改为浮点数会自动获取正确的数组类型。 - NetMage
2
回答应包含一个对初学者很重要的精度:这实际上不是字面值。每当调用它时,都会创建并分配一个新的数组实例。 - Crono

12

Blorgbeard是正确的,但您也可以考虑使用新的.NET 4.0元组类。我发现当您需要返回一组固定数量的项目时,使用它更易于处理。例如,如果您总是需要返回3个项目的数组,则具有3个int元组可以清晰地表明其含义。

return new Tuple<int,int,int>(0,0,0);

或者简单地说

return Tuple.Create(0,0,0);

2
如果您有可变数量的项目,但想要一些额外功能,您也可以这样做:return new List<int>(new int[]{0,0,0}); - Dave
1
@Dave,List<int>(Enumerable.Repeat(0, 3)) 不是更好吗? - NetMage
@NetMage 如果你想要改变项目数量的话,那肯定会更好。 - Dave
如果你想要一个带有初始内容的列表,最好使用return new List<int> { 0, 0, 0 };。中间数组是不必要的。 - Paul Ruane

10

如果数组具有固定的大小,并且您想要返回一个新的填充了零的数组

return new int[3];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接