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)สร้างอาร์เรย์ wrapper ด้วยตนเองและส่งตรงไปยังเมธอดดังกล่าวโดยlassevk :
Foo( new object[] { array } ); // Equivalent to calling convention 1.
2)หรือส่งอาร์กิวเมนต์ไป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 );
แก้ไข:เรย์มอนด์เฉินอธิบายพฤติกรรมนี้และวิธีการที่เกี่ยวกับสเปค C # ในการโพสต์ใหม่