문제

나는 궁금해서 누군가가 이것에 대해 소민을 흘릴 수 있기를 바랍니다. 그러나 왜 '매개 변수'를 취하는 c# 함수가 배열이어야합니까?

매개 변수 목록의 객체가 배열에 입력되지만 누군가가 정의되지 않은 배열 객체를 가져 오는 변수 함수를 만들려면 어떻게해야합니까?

예를 들어이 기능을 취하십시오 ...

private Int32 Sum(params Int32[] numbers)
{
    return numbers.Sum(); // Using LINQ here to sum
}

아주 간단하게, 예를 들어 다른 양의 숫자를 가져갈 수 있습니다 ... 예를 들어 ...

Int32 x = Sum(1);
Int32 y = Sum(1, 2);
Int32 z = Sum(1, 2, 3);

이제 다른 양의 정수 배열을 가져 와서 모든 숫자를 요약하는 함수를 만들고 싶다고 가정 해 봅시다. 내가 아는 한 권투를 고려해야 할 것입니다 ...

private Int32 SumArrays(params Object[] numbers)
{
    Int32 total = 0;
    foreach (Object o in numbers)
    {
        Int32[] array = (Int32[])o;

        total += array.Sum();
    }
    return total;
}

그런 다음 ...처럼 사용할 수 있습니다.

Int32[] arr1 = new Int32[] { 1, 2, 3 };
Int32[] arr2 = new Int32[] { 1, 2, 3, 4 };
Int32[] arr3 = new Int32[] { 1, 2, 3, 4, 5 };

Int32 x = SumArrays((Object)arr1, (Object)arr2);
Int32 y = SumArrays((Object)arr1, (Object)arr2, (Object)arr3);

이 배후의 추론은 무엇입니까? 왜 이것이 단일 비 배열 변수로 구현되지 않았습니까? 와 같은 params Int32?

도움이 되었습니까?

해결책

기능은 이미 존재하며 권투에 의지 할 필요가 없습니다.

private int SumAll(params int[][] args)
{
    int result = 0;
    for (int x = 0; x < args.Length; x++)
    {
        for (int y = 0; y < args[x].Length; y++)
        {
            result += args[x][y];
        }
    }
    return result;
}

배열 배열 만 추가하면됩니다.

다른 팁

매개 변수는 단일 객체로 롤링되며 컬렉션을 보유 할 수있는 가장 낮은 수준의 객체는 배열입니다. 가변 수의 int 배열을 취하는 함수를 원한다면 int 배열 배열을 취하는 것으로 선언해야합니다.

static int SumArrays(params int[][] data)
{
    int rval = 0;
    for (int i = 0; i < data.Length; i++)
    {
        rval += data[i].Sum();
    }
    return rval;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top