অস্পষ্ট ম্যাচের ব্যতিক্রম এড়ানো


115

আমি প্রতিবিম্বের মাধ্যমে কোনও ধরণের স্ট্যাটিক পদ্ধতিটি পার্সে প্রার্থনা করছি কারণ সংকলন-সময়ে আমি বস্তুর প্রকারটি জানি না (আমি জানি, তবে এটি একটি পার্স পদ্ধতি রয়েছে, একটি স্ট্রিং নিয়েছে)।

যাইহোক, আমি একটি দ্ব্যর্থক ম্যাচের ব্যতিক্রম পাচ্ছি, সম্ভবতঃ কারণ এখানে প্রচুর ওভারলোডেড পার্স পদ্ধতি রয়েছে যা প্রত্যেকে একটি করে বস্তু গ্রহণ করে (স্ট্রিং, ইনট, ডাবল ইত্যাদি)।

আমি সঠিক পদ্ধতিতে ( পার্স (স্ট্রিং) ) পৌঁছেছি এবং ব্যতিক্রমটি ছুঁড়ে না দেওয়া হয়েছে তা নিশ্চিত করার জন্য আমি কীভাবে আমার পদ্ধতির অনুরোধে আরও নির্দিষ্ট হতে পারি ।

আমার কোডটি এর মতো দেখাচ্ছে:

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

উত্তর:


193

এই ওভারলোডটি ব্যবহার করুন এবং ব্যবহার করুন

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

9
@ বিটারব্লিউ আমি বিভ্রান্ত হয়ে পড়েছি আপনি কেন সেই মন্তব্যটি লিখবেন - এবং আপনি কেন স্টাইলের বিষয়গুলি আলোচনার জন্য বিবেচনা করবেন?
বেনজামিন পোডসজুন

9
উপস্থাপনাটি ঠিক আছে, এটি আপনি পছন্দ করেন বলে মনে করেন তার চেয়ে আলাদা স্টাইল অনুসরণ করতেই ঘটে। আপনি "আমি এই বাইকের শেডটি ব্যবহার করতাম, যদি এটি আরও কিছুটা নীল রঙের হত" the যা আমাকে বিভ্রান্ত করে। মন্তব্য সম্পাদনা: যতক্ষণ না আপনি অজ্ঞাত যে নতুন [] {} আসলে এরে ধরণ infers এবং করছি IS নতুন ধরনের [] এই ক্ষেত্রে সমতূল্য? সেক্ষেত্রে আমি দুঃখিত - আমি ধরে নিয়েছি যে আপনি স্টিপটিতে মন্তব্য করেছেন (উভয় কাজ করে) সম্ভাব্যভাবে স্নিপেটটি ভুল বলে মনে করছেন (এটি নয়)।
বেনিয়ামিন পোডসজুন

1
উত্তরের জন্য ধন্যবাদ, ছেলেরা। পরবর্তী লোকটিকে কিছুটা সমস্যা বাঁচাতে, রেফারেন্সের ধরণের জন্য, এই জাতীয় কিছু ব্যবহার করুন: টাইপফ (স্ট্রিং) ake মেকবাইরাইফটাইপ ();
ব্রবে

5
@ বিটারব্লু আমি 'যুবক' নই এবং নিশ্চিতরূপে শোনা যাচ্ছে। এমন প্রোগ্রামার যা পড়তে পারে না new [] { typeof(string) }তার কোড বজায় রাখা ছাড়াও অন্যান্য সমস্যা থাকে। টাইপটি আক্ষরিকভাবে ঠিক সেখানে। প্লাস 'ক্রেজি ওয়ান-লাইনার' প্রাসঙ্গিক নয়, আপনার পছন্দসই স্টাইলটি একেবারে এই লাইনে অনর্থক অক্ষর যুক্ত করে। আমি যুক্তি দেব new Type[] {...}যা কম পাঠযোগ্য, কারণ লাইনটি দীর্ঘ এবং এটি অপ্রাসঙ্গিক তথ্য / বয়লারপ্লেট / গোলমাল। সুতরাং: এটি শৈলীর বিষয় এবং আপনি একটি নিষ্ক্রিয় আক্রমণাত্মক দিয়ে আলোচনা শুরু করেছিলেন 'এটি যদি আমার স্বাদ
মেটাতে পারে তবে উন্নীত হত

2
সতর্কতা অবলম্বন করুন, 2 টি পদ্ধতির একই নাম, একই সংখ্যার পরামিতি এবং একই ধরণের পরামিতি থাকলে এটি কাজ করবে না। আমি এখানে সুস্পষ্ট কাস্ট অপারেটরদের ওভারলোডগুলি নিয়ে ভাবছি। উদাহরণস্বরূপ public static explicit double(MyType obj)এবং public static explicit float(MyType obj)। আপনার এখনও একটি থাকবে AmbiguousMatchException। এই ক্ষেত্রে, আপনি returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float))উদাহরণস্বরূপ ব্যবহার করতে পারেন ।
গিলিয়াম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.