Java의 vararg 매개 변수에 대한 C # 대안이 있습니까?


93

저는 Java에서 일했고 .Net 기술을 처음 접했습니다.

변수 입력 매개 변수를 허용하는 함수를 C #으로 선언 할 수 있습니까?

다음 Java 구문과 유사한 C # 구문이 있습니까?

void f1(String... a)

2
아래 답변 중 하나 Stack Overflow의 작동 방식과 같이 귀하의 질문 에 답한 경우 옆에있는 확인 표시를 클릭하여 답변을 "수락"합니다. 여기에 세부 사항 .
TJ Crowder

답변:


150

예, C #에는 varargs 매개 변수와 동일한 기능이 있습니다. 매개 변수 배열 이라고 하며 params수정 자 와 함께 도입됩니다 .

public void Foo(int x, params string[] values)

그런 다음 다음과 같이 호출하십시오.

Foo(10, "hello", "there");

Java와 마찬가지로 이와 같이 변할 수있는 마지막 매개 변수 일뿐입니다. Java와 마찬가지로 매개 변수 params object[] objects는 유형의 단일 인수가 object[]다시 래핑 되는지 여부를 기억해야하므로 쉽게 혼동을 일으킬 수 있습니다 . nullable 형식의 경우와 마찬가지로의 단일 인수가 null배열 참조 또는 단일 배열 요소로 처리 되는지 여부를 기억해야합니다 . ( 컴파일러는 필요한 경우에만 배열을 생성 한다고 생각 하지만 기억할 필요가 없도록 코드를 작성하는 경향이 있습니다.)


+1, (다른 언어 기능과 마찬가지로) 언급하지만 남용해서는 안됩니다.
Federico Berasategui

16
@HighCore : 당신이에 대해 꽤 많이 다른 언어 기능을 그것을 언급 위하여려고하는 경우에, 그것은 :)하지 언급 할만큼 가치 아마
존 소총

2
@hvd : OP가 초보자 인 것처럼 보이기 때문에 여기에서 명명 된 인수, 선택적 매개 변수 등을 사용하지 않는 것이 좋습니다. 당신이하려는 요점은 알지만 지금은 빛보다 더 혼란 스러울 것 같아요.
Jon Skeet

37

매개 변수 살펴보기 (C # 참조)

params 키워드를 사용하면 가변 개수의 인수를 사용하는 메서드 매개 변수를 지정할 수 있습니다.

매개 변수 선언에 지정된 유형의 쉼표로 구분 된 인수 목록 또는 지정된 유형의 인수 배열을 보낼 수 있습니다. 인수를 보낼 수도 없습니다.

메서드 선언에서 params 키워드 뒤에는 추가 매개 변수가 허용되지 않으며 메서드 선언에는 하나의 params 키워드 만 허용됩니다.

예제에서 볼 수 있듯이 메서드는 다음과 같이 선언됩니다.

public static void UseParams(params int[] list)
{
    for (int i = 0; i < list.Length; i++)
    {
        Console.Write(list[i] + " ");
    }
    Console.WriteLine();
}

그리고로 사용

UseParams(1, 2, 3, 4);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.