只初始化c#数组的几个值?

时间:2015-08-09 19:07:48

标签: c# arrays initialization

我正在尝试编写一个程序,其中,我想初始化一个数组的4个起始值,而另外16个将从控制台手动输入。

为此,我写了以下代码:

int[] intArray = new int[20] { 20, 22, 23, 0 }; 

但我收到以下异常:"' 20'的数组初始值设定项预期"

我知道可以通过以下语法完成:

int[] intArray = new int[20];
intArray[0] = 20;
intArray[1] = 22;
intArray[2] = 23;
intArray[3] = 0;

我想知道这是否可以在一行中实现。

5 个答案:

答案 0 :(得分:2)

如果您经常需要这个,可以创建自己的扩展方法来填充现有数组中的值:

int[] intArray = new int[20].Populate(20, 22, 23, 0); 

示例实施:

public static class ListExtensions
{
    public static TList Populate<TList, TElement>(this TList list, params TElement[] values)
        where TList : IList<TElement>
    {
        // TODO: argument validation

        for (int i = 0; i < values.Length; i++)
            list[i] = values[i];

        return list;
    }
}

答案 1 :(得分:1)

如何保持简单:

public static T[] CreateAndInitArray<T>( int len, T[] initialValues )
{
    var temp = new T[len];
    initialValues.CopyTo( temp, 0 );
    return temp;
}

使用:

int[] intArray = CreateAndInitArray( 20, new int[] { 20, 22, 23, 0 } );

initialValues参数也可能是params参数,但考虑到长度参数,这很容易引起混淆。我个人喜欢道格拉斯提供的答案,看起来更合乎逻辑。

答案 2 :(得分:0)

这有两行:

  int[] intArray = new int[20];
  new int[4] { 20, 22, 23, 0 }.CopyTo(intArray , 0);

甚至:

  int[] intArray = new int[20];
  new int[] { 20, 22, 23, 0 }.CopyTo(intArray , 0);

请注意,未命名的数组在分号后立即超出范围。 - 我认为它不会变得更简单!

答案 3 :(得分:0)

我发现jon双向飞碟的建议更有用。

new[] { 20, 22, 23, 0 }.Concat(Enumerable.Repeat(0, 16)).ToArray();

答案 4 :(得分:-1)

我认为你可以这样做:

    private static int[] getInput()
    {

        int[] array = { 20, 22, 23, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,    1, 1 };

        bool done = false;
        int current = 4;
        while (!done)
        {
            Console.WriteLine("Enter in a number to be added to the array");
            string input = Console.ReadLine();
            array[current] = Convert.ToInt32(input);
            current++;
            if (current==array.Length)
            {
                done = true;
            }
        }
        return array;
    }