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?

bevacqua.dll
sumber

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.

usr
sumber
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>()))
ds4940.dll
sumber
6
Tergantung pada kasus penggunaan juga ... x.someMethod(default,default)... dapat digunakan.
LosManos