我正在尝试编写一个程序,其中,我想初始化一个数组的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;
我想知道这是否可以在一行中实现。
答案 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;
}