C#等同于Java的Arrays.fill()方法

时间:2011-07-26 09:45:29

标签: c# java arrays

我在Java中使用以下语句:

Arrays.fill(mynewArray, oldArray.Length, size, -1);

请建议等效的C#。

3 个答案:

答案 0 :(得分:10)

我不知道框架中有什么可以做到这一点,但它很容易实现:

// Note: start is inclusive, end is exclusive (as is conventional
// in computer science)
public static void Fill<T>(T[] array, int start, int end, T value)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }
    if (start < 0 || start >= end)
    {
        throw new ArgumentOutOfRangeException("fromIndex");
    }
    if (end >= array.Length)
    {
        throw new ArgumentOutOfRangeException("toIndex");
    }
    for (int i = start; i < end; i++)
    {
        array[i] = value;
    }
}

或者,如果您想指定计数而不是开始/结束:

public static void Fill<T>(T[] array, int start, int count, T value)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }
    if (count < 0)
    {
        throw new ArgumentOutOfRangeException("count");
    }
    if (start + count >= array.Length)
    {
        throw new ArgumentOutOfRangeException("count");
    }
    for (var i = start; i < start + count; i++)
    {
        array[i] = value;
    }
}

答案 1 :(得分:2)

好像你想做更像这样的事情

int[] bar = new int[] { 1, 2, 3, 4, 5 };
int newSize = 10;
int[] foo = Enumerable.Range(0, newSize).Select(i => i < bar.Length ? bar[i] : -1).ToArray();

使用旧值创建一个新的更大的数组并填充额外的数据。

如需简单填写,请尝试

int[] foo = Enumerable.Range(0, 10).Select(i => -1).ToArray();

或子范围

int[] foo = new int[10];
Enumerable.Range(5, 9).Select(i => foo[i] = -1);

答案 2 :(得分:0)

试试这个

Array.Copy(source, target, 5);

了解更多信息here