Công cụ params
sửa đổi tham số cung cấp cho người gọi một cú pháp phím tắt để truyền nhiều đối số cho một phương thức. Có hai cách để gọi một phương thức với mộtparams
tham số:
1) Gọi với một mảng kiểu tham số, trong trường hợp đó params
từ khóa không có hiệu lực và mảng được truyền trực tiếp vào phương thức:
object[] array = new[] { "1", "2" };
// Foo receives the 'array' argument directly.
Foo( array );
2) Hoặc, gọi với một danh sách các đối số mở rộng, trong trường hợp đó, trình biên dịch sẽ tự động bao bọc danh sách các đối số trong một mảng tạm thời và chuyển nó sang phương thức:
// Foo receives a temporary array containing the list of arguments.
Foo( "1", "2" );
// This is equivalent to:
object[] temp = new[] { "1", "2" );
Foo( temp );
Để truyền một mảng đối tượng cho một phương thức có params object[]
tham số "", bạn có thể:
1) Tạo một mảng bao bọc bằng tay và truyền trực tiếp vào phương thức, như được đề cập bởi lassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2) Hoặc, đưa đối số tới object
, như Adam đã đề cập , trong trường hợp đó, trình biên dịch sẽ tạo mảng trình bao cho bạn:
Foo( (object)array ); // Equivalent to calling convention 2.
Tuy nhiên, nếu mục tiêu của phương thức là xử lý nhiều mảng đối tượng, có thể dễ dàng khai báo nó với params object[][]
tham số " " rõ ràng . Điều này sẽ cho phép bạn vượt qua nhiều mảng dưới dạng đối số:
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 );
Chỉnh sửa: Raymond Chen mô tả hành vi này và cách nó liên quan đến đặc tả C # trong một bài đăng mới .