【问题标题】:Initialization of only few values of c# array?仅初始化 c# 数组的几个值?
【发布时间】:2015-08-09 19:07:48
【问题描述】:

我正在尝试编写一个程序,我想在其中初始化一个数组的 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;

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

【问题讨论】:

  • “但我想知道如何在一行中做到这一点” - 为什么需要?基本上没有特别简单的方法可以做到这一点。您可以通过多种方式 使用 LINQ 完成此操作,但没有什么特别简单。 new[] { 20, 22, 23, 0 }.Concat(Enumerable.Repeat(0, 16)).ToArray() 会这样做,例如...
  • 我假设 一行 你的意思是一个陈述?因为你可以将int[] intArray = new int[20]; intArray[0] = 20; intArray[1] = 22; intArray[2] = 23; intArray[3] = 0; 做为一行,但它是相同数量的语句...
  • 是的,它的工作原理,但请你让我怎么做?它的工作@ jon Skeet

标签: c# arrays .net initialization


【解决方案1】:

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

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;
    }
}

【讨论】:

  • 是的,它是最好和正确的方法之一,但我正在寻找@jon skeet 建议的东西。
【解决方案2】:

如何保持简单:

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 参数,但考虑到长度参数,这很容易混淆。我个人更喜欢 Douglas 提供的答案,看起来更合乎逻辑。

【讨论】:

  • 是的,这是做我想做的事情的正确方法 +1 @chris
【解决方案3】:

这在两行中起作用:

  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);

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

【讨论】:

    【解决方案4】:

    我发现 jon skeet 的建议更有用。

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

    【讨论】:

      【解决方案5】:

      我认为你可以这样做:

          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;
          }
      

      【讨论】:

        猜你喜欢
        • 2017-07-21
        • 2021-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多