ทรีนิพจน์อาจไม่มีการเรียกหรือการเรียกที่ใช้อาร์กิวเมนต์ที่เป็นทางเลือก


145

ทรีนิพจน์อาจไม่มีการเรียกหรือการเรียกที่ใช้อาร์กิวเมนต์ที่เป็นทางเลือก

return this.RedirectToAction<MerchantController>(x => x.Edit(merchantId));

ตำแหน่งที่แก้ไขมีอาร์กิวเมนต์ที่สองและไม่สามารถใช้ได้

ทำไมนี้

คำตอบ:


106

พื้นฐานต้นไม้แสดงออก APIไม่สนับสนุนข้อโต้แย้งที่ไม่จำเป็น

สำหรับโค้ดที่คอมไพล์ด้วย IL คอมไพเลอร์ C # จะแทรกค่าเริ่มต้น ณ เวลารวบรวม (ฮาร์ดโค้ด) เนื่องจาก CLR ไม่สนับสนุนวิธีการโทรด้วยอาร์กิวเมนต์ที่เป็นตัวเลือกเมื่ออาร์กิวเมนต์ไม่ได้ให้ไว้อย่างชัดเจน


2
นี่รวมถึงการโอเวอร์โหลดหรือไม่ ฉันได้รับสิ่งนี้เมื่อฉันทำเกินพิกัด บางสิ่งบางอย่างเช่น void Blah (string a) และ void Blah (object a) เมื่อฉันพยายามที่จะทำการโทรหาเวอร์ชันด้วยออบเจกต์แบบ MOQ มันทำให้ฉันมีข้อผิดพลาดนี้
vbullinger

4
เกินพิกัดได้รับการสนับสนุนอย่างเต็มที่ในแง่ที่เกินพิกัดเฉพาะจะถูกฮาร์ดโค้ดลงในต้นไม้
usr

1
ข้อความแสดงข้อผิดพลาดที่ค่อนข้างสวย แต่คำตอบนี้แสดงให้เห็นว่าฉันมีพารามิเตอร์ทางเลือกพร้อมค่าเริ่มต้นในวิธีที่พยายามเยาะเย้ย
vpalmu

140

มีข้อความเดียวกันเมื่อพยายามใช้ Mock.setup เพื่อจำลองวิธีที่มีพารามิเตอร์เริ่มต้นหลายรายการ ฉันแค่ต้องเพิ่มพารามิเตอร์เพิ่มเติมในแลมบ์ดา

void someMethod(string arg1 = "", string arg2 = "")

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>()))

1
สิ่งนี้ช่วยฉัน It.IsAny<object>ผมก็หายไป โดยทั่วไปฉันไม่มีพารามิเตอร์สำหรับsomeMethod()
akasoggybunz

ฉันต้องตรวจสอบให้แน่ใจว่าฉันได้รวมค่าสำหรับพารามิเตอร์ทุกตัวในวิธีการ (แม้ว่าจะมีหลายพารามิเตอร์ในวิธีการที่มีการตั้งค่าเริ่มต้น)
slashNburn

1
ขึ้นอยู่กับการใช้งานกรณี ... ยังx.someMethod(default,default)สามารถใช้
LosManos
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.