Belirsiz bir eşleşme istisnasından kaçınma


115

Statik bir yöntemi çağırıyorum Yansıma yoluyla bir türü ayrıştırıyorum çünkü derleme zamanında nesnenin türünü bilmiyorum (ancak, bir dize alan bir Ayrıştırma yöntemi olduğunu biliyorum ).

Bununla birlikte, muhtemelen her biri tek bir nesne (string, int, double vb.) Alan çok sayıda aşırı yüklenmiş Ayrıştırma yöntemi olduğu için belirsiz bir eşleşme istisnası alıyorum .

Doğru yönteme ( Parse (string s) ) ulaştığımdan ve istisnanın atılmadığından emin olmak için yöntem çağrımda nasıl daha spesifik olabilirim ?

Kodum şöyle görünüyor:

Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });

Yanıtlar:


194

Bu aşırı yüklemeyi kullanın ve

returnType.GetMethod("Parse", new [] {typeof(string)})

9
@Bitterblue Kafam karıştı neden bu yorumu yazıyorsunuz - ve neden tartışmaya değer üslup meselelerini düşünüyorsunuz?
Benjamin Podszun

9
Sunum gayet iyi, tercih ettiğinizden farklı bir tarzı takip ediyor. "Biraz daha mavimsi olsaydı bu bisiklet kulübesini kullanırdım" şeklinde yorumladınız. Kafamı karıştıran. Yorumu düzenleme: Yeni [] {} dizisinin türünü gerçekten ortaya çıkardığının ve bu durumda yeni Tür [] ile eşdeğer IS'nin olduğunu bilmiyorsanız ? Bu durumda özür dilerim - potansiyel olarak pasajın yanlış olduğunu (değil) düşünürken stil (her ikisi de çalışır) hakkında yorum yaptığınızı varsaydım.
Benjamin Podszun

1
Cevap için teşekkürler beyler. Sıradaki adamı biraz sorun çıkarmak için, referans türleri için, şuna benzer bir şey kullanın: typeof (string) .MakeByRefType ();
BRebey

5
@Bitterblue 'Genç' değilim ve kesinlikle küçümseyici geliyor. Okuyamayan bir programcının, new [] { typeof(string) }kodu korumaktan başka sorunları vardır. Tip tam anlamıyla orada. Ayrıca 'çılgın tek satırlar' alakalı değildir, tercih ettiğiniz stil sadece bu satıra gereksiz harfler ekler. Bunun new Type[] {...}daha az okunabilir olduğunu iddia ediyorum , çünkü satır daha uzun ve bu alakasız bilgi / standart / gürültü. Dolayısıyla: Bu bir tarz meselesi ve tartışmaya pasif bir agresif ile başladınız 'eğer benim zevkime hitap
edecekse

2
Dikkatli olun, 2 yöntem aynı ada, aynı sayıda parametrelere ve aynı türde parametrelere sahipse çalışmayacaktır. Burada açık döküm operatörlerinin aşırı yüklenmesini düşünüyorum. Örneğin public static explicit double(MyType obj)ve public static explicit float(MyType obj). Yine de bir AmbiguousMatchException. Bu durumda, returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))örneğin kullanabilirsiniz .
Guillaume
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.