Apakah ada cara bagi operator nameof untuk mengakses parameter metode (di luar metode yang sama)?

Ambil kelas dan metode berikut:

public class Foo
    public Foo Create(string bar) {
        return new Foo(bar);
    }

Jadi mendapatkan "Buat" sudah jelas: nameof(Foo.Create)

Apakah ada cara untuk mendapatkan "bar" selain menggunakan refleksi untuk membaca parameter pada saat run time?


person Chris Marisic    schedule 20.05.2016    source sumber
comment
Hanya karena penasaran, mengapa Anda menginginkannya?   -  person Paulo Morgado    schedule 21.05.2016
comment
@PauloMorgado Saya mengalirkan json langsung melalui sistem saya dengan pengetikan seminimal mungkin. Saya suka bahwa dalam pengujian saya, saya dapat dengan mudah menandakan hubungan antara properti dan nama jsonnya................................ $"{nameof(Person.Name)}:chris, foo:bar" (Saya ada di kotak komentar, ini bukan salin & tempel literal tetapi ide umum). Lebih sulit untuk mengungkapkan hubungan antara pasangan nama & nilai properti json dan hubungan dengan pasangan nama & tipe argumen metode. Saya bosan dengan lapisan pemetaan yang tidak pernah berakhir padahal yang saya inginkan hanyalah masukan langsung.   -  person Chris Marisic    schedule 23.05.2016
comment
@PauloMorgado Salah satu kasus yang sangat berguna adalah Bootstrapping kontainer IoC, seperti Ninject's WithConstructorArgument mengambil nama parameter literal string yang dipantulkan - perubahan apa pun pada tanda tangan metode, dan boom! bootstrapnya rusak. Akan lebih ideal jika menggunakan nameof(Class.Method.Parameter) sebagai gantinya.   -  person StuartLC    schedule 02.11.2017


Jawaban (1)


Tidak. Tidak ada cara untuk mendapatkan nama parameter dari luar metode menggunakan nameof. nameof tidak berfungsi untuk parameter metode jika Anda menginginkan nama di sisi pemanggil (untuk pihak yang dipanggil, itu jelas berfungsi). Metode lain yang Anda sebutkan, seperti refleksi, berhasil.

var parameterNames = typeof(Program)
                     .GetMethod(nameof(Program.Main)).GetParameters()
                     .Select(p => p.Name);
person Patrick Hofman    schedule 20.05.2016
comment
Kalimat ini salah: nameof tidak berfungsi untuk parameter metode. nameof berfungsi untuk parameter, tetapi hanya dalam cakupan parameter. - person Ian Newson; 14.11.2016
comment
Ya benar. Diperbarui sedikit. Jika Anda memiliki saran yang lebih baik, silakan @IanNewson - person Patrick Hofman; 14.11.2016