Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#相当于Java';s array.fill()方法_C#_Java_Arrays - Fatal编程技术网

C#相当于Java';s array.fill()方法

C#相当于Java';s array.fill()方法,c#,java,arrays,C#,Java,Arrays,我在Java中使用以下语句: Arrays.fill(mynewArray, oldArray.Length, size, -1); 请推荐C#等价物。像这样试试 Array.Copy(source, target, 5); int[] bar = new int[] { 1, 2, 3, 4, 5 }; int newSize = 10; int[] foo = Enumerable.Range(0, newSize).Select(i => i < bar.Length ?

我在Java中使用以下语句:

Arrays.fill(mynewArray, oldArray.Length, size, -1);
请推荐C#等价物。

像这样试试

Array.Copy(source, target, 5);
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();

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

// 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;
    }
}
//注意:开始是包含的,结束是独占的(按惯例
//(计算机科学专业)
公共静态空白填充(T[]数组,int开始,int结束,T值)
{
if(数组==null)
{
抛出新的ArgumentNullException(“数组”);
}
如果(开始<0 | |开始>=结束)
{
抛出新ArgumentOutOfRangeException(“fromIndex”);
}
如果(结束>=array.Length)
{
抛出新ArgumentOutOfRangeException(“toIndex”);
}
for(int i=start;i
或者,如果要指定计数而不是开始/结束:

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;
    }
}
publicstaticvoidfill(T[]数组,int start,int count,T值)
{
if(数组==null)
{
抛出新的ArgumentNullException(“数组”);
}
如果(计数<0)
{
抛出新ArgumentOutOfRangeException(“计数”);
}
if(开始+计数>=array.Length)
{
抛出新ArgumentOutOfRangeException(“计数”);
}
对于(变量i=开始;i<开始+计数;i++)
{
数组[i]=值;
}
}

您似乎想做更多类似的事情

Array.Copy(source, target, 5);
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 = new int[10];
Enumerable.Range(5, 9).Select(i => foo[i] = -1);

这与
fill
的作用不同,但它不是要复制的目标数组…它需要长度..mynewArray是int[]Rasel的建议是可以的。工作示例:int[]arr=newint[1000];Copy(arr.Select(i=>5.ToArray(),arr,arr.Length);我希望我的编辑是合理的。。或者将变量命名为
uptoIndex
@nawfal:No,它是故意(尽管不一致)独占的。我已经整理好并添加了一个替代方案。乔恩,为什么你要检查例外情况,并在clr会这样做时投入自己的精力?我对这种设计有点困惑。仅仅第二个条件检查(在两个示例中)就足够了吗?@nawfal:CLR将抛出不同的异常。假设这些是方法参数,抛出的异常应该是ArgumentExceptions,IMO。这表明是调用代码出错,而不是方法本身的问题。@JonSkeet,现在有点太晚了。。。仍然有一个想法:负计数不会导致循环中出现异常。。。投入负计数或反向启动和停止需要有充分的理由…,也dotnet提供相同的功能。