C#可以使用哪些数组初始化语法?


当前回答

var contacts = new[]
{
    new 
    {
        Name = " Eugene Zabokritski",
        PhoneNumbers = new[] { "206-555-0108", "425-555-0001" }
    },
    new 
    {
        Name = " Hanying Feng",
        PhoneNumbers = new[] { "650-555-0199" }
    }
};

其他回答

对于C#声明中的多维数组,请赋值。

public class Program
{
    static void Main()
    {
        char[][] charArr = new char[][] { new char[] { 'a', 'b' }, new char[] { 'c', 'd' } };

        int[][] intArr = new int[][] { new int[] { 1, 2 }, new int[] { 3, 4 } };
    }

}

另一种方法是调用静态函数(用于静态对象)或实例对象的任何函数。这可用于成员初始化。

现在我还没有测试所有这些,所以我将把我测试过的(静态成员和静态函数)

Class x {
    private static Option[] options = GetOptionList();
    private static Option[] GetOptionList() {

        return (someSourceOfData).Select(dataitem => new Option()
                 {field=dataitem.value,field2=dataitem.othervalue});
    }
}

我想知道的是,是否有绕过函数声明的方法。我知道在这个例子中,它可以直接使用,但假设函数稍微复杂一些,不能简化为一个表达式。

我想象如下(但不起作用)

Class x {
    private static Option[] options = () => {
        Lots of prep stuff here that means we can not just use the next line
        return (someSourceOfData).Select(dataitem => new Option()
                 {field=dataitem.value,field2=dataitem.othervalue});
    }
}

基本上是为填充变量的范围声明函数的一种方式。如果有人能教我怎么做,我会很高兴的。

hi只是为了添加另一种方式:从此页面:https://learn.microsoft.com/it-it/dotnet/api/system.linq.enumerable.range?view=netcore-3.1

如果您想生成0到9的指定范围内的整数序列,可以使用此表单:

using System.Linq
.....
public int[] arrayName = Enumerable.Range(0, 9).ToArray();

无LINQ重复:

float[] floats = System.Array.ConvertAll(new float[16], v => 1.0f);

如果您想初始化一个预先初始化的相等(非空或非默认)元素的固定数组,请使用以下命令:

var array = Enumerable.Repeat(string.Empty, 37).ToArray();

也请参加本次讨论。