Pohon ekspresi tidak boleh berisi panggilan atau pemanggilan yang menggunakan argumen opsional


155

Pohon ekspresi tidak boleh berisi panggilan atau pemanggilan yang menggunakan argumen opsional

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

Di mana edit memiliki argumen kedua yang tidak dapat dibatalkan.

Kenapa ini?

Jawaban:


111

The mendasari pohon ekspresi API tidak mendukung argumen opsional.

Untuk kode yang dikompilasi IL, compiler C # menyisipkan nilai default pada waktu kompilasi (hard-coded), karena CLR tidak mendukung metode pemanggilan dengan argumen opsional baik ketika argumen tidak disediakan secara eksplisit.


2
Apakah ini entah bagaimana termasuk kelebihan beban? Saya mendapatkan ini ketika saya membuat beban berlebih. Sesuatu seperti kosong Blah (string a) dan kosong Blah (objek a). Ketika saya mencoba untuk melakukan MOQ panggilan ke versi dengan objek, itu memberi saya kesalahan ini.
vbullinger

4
Beban berlebih didukung sepenuhnya dalam arti bahwa kelebihan beban tertentu akan di-hardcode ke dalam tree.
usr

1
Pesan kesalahan yang cukup samar, tetapi jawaban ini menunjukkan jalan, saya memiliki parameter opsional dengan nilai default pada metode ini mencoba untuk mengejek.
vpalmu

163

Memiliki pesan yang sama ketika mencoba menggunakan Mock.setup untuk meniru metode dengan beberapa parameter default. Saya baru saja menambahkan parameter tambahan di lambda.

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

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

6
Tergantung pada kasus penggunaan juga ... x.someMethod(default,default)... dapat digunakan.
LosManos
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.