Saya menggunakan metode Parse statis pada tipe melalui refleksi karena saya tidak tahu jenis objek pada waktu kompilasi (saya tahu, bagaimanapun, ia memiliki metode Parse , mengambil string).
Namun, saya mendapatkan pengecualian pertandingan yang ambigu, mungkin karena ada banyak metode Parse yang kelebihan beban, masing-masing mengambil satu objek (string, int, double, dll.).
Bagaimana saya bisa lebih spesifik dalam pemanggilan metode saya untuk memastikan saya mencapai metode yang benar ( Parse (string s) ) dan pengecualian tidak dilemparkan.
Kode saya terlihat seperti ini:
Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
c#
reflection
ambiguous-call
Ben Aston
sumber
sumber
new [] { typeof(string) }
memiliki masalah lain selain memelihara kode. Jenisnya secara harfiah ada di sana. Ditambah 'satu baris gila' tidak relevan, gaya pilihan Anda hanya menambahkan huruf yang berlebihan ke dalam baris ini. Saya berpendapat itunew Type[] {...}
kurang dapat dibaca, karena garisnya lebih panjang dan itu adalah informasi / boilerplate / noise yang tidak relevan. Karenanya: Ini masalah gaya dan Anda memulai diskusi dengan pasif agresif 'akan mendapat suara positif, jika itu sesuai dengan selera saya' ..public static explicit double(MyType obj)
danpublic static explicit float(MyType obj)
. Anda masih akan memiliki fileAmbiguousMatchException
. Dalam hal ini, Anda bisa menggunakanreturnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))
misalnya.