params
파라미터 수정 호출자에게있어서 여러 인자를 전달하는 단축 구문을 제공한다. params
매개 변수를 사용 하여 메소드를 호출하는 방법에는 두 가지가 있습니다 .
1) 매개 변수 유형의 배열을 사용하여 호출합니다.이 경우 params
키워드는 효과가없고 배열이 메소드에 직접 전달됩니다.
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) 또는 확장 된 인수 목록을 사용하여 호출합니다.이 경우 컴파일러는 인수 목록을 임시 배열에 자동으로 래핑하고 메서드에 전달합니다.
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
" params object[]
"매개 변수 가있는 메소드에 객체 배열을 전달 하려면 다음 중 하나를 수행 할 수 있습니다.
1) 래퍼 배열을 수동으로 만들고 lassevk에서 언급 한대로 직접 메서드에 전달합니다 .
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) 또는 Adam이object
언급 한대로 인수를로 캐스팅합니다 .이 경우 컴파일러가 래퍼 배열을 만듭니다.
Foo( (object)array ); // Equivalent to calling convention 2.
그러나 메서드의 목표가 여러 개체 배열을 처리하는 것이라면 명시적인 " params object[][]
"매개 변수를 사용하여 선언하는 것이 더 쉬울 수 있습니다 . 이렇게하면 여러 배열을 인수로 전달할 수 있습니다.
void Foo( params object[][] arrays ) {
foreach( object[] array in arrays ) {
// process array
}
}
...
Foo( new[] { "1", "2" }, new[] { "3", "4" } );
// Equivalent to:
object[][] arrays = new[] {
new[] { "1", "2" },
new[] { "3", "4" }
};
Foo( arrays );
편집 : Raymond Chen은 새 게시물 에서이 동작과 C # 사양과 의 관계를 설명합니다 .