विभिन्न प्रकार के लिए 100 बार फ़ंक्शन ओवरलोड करने या 100 अलग-अलग तुलना करने वाले के बजाय मैंने एक फ़ंक्शन के भीतर प्रकार को जांचने का निर्णय लिया है।एक प्रकार की जांच करने का सबसे तेज़ तरीका क्या है?
उदाहरण के लिए मैं 2 ऑब्जेक्ट्स के भीतर प्रकारों (प्राइमेटिव्स और स्ट्रिंग्स) के मानों की तुलना करने के लिए एक डिफ़ॉल्ट तुलनाकर्ता का उपयोग कर रहा हूं।
public class DefComparer : IComparer<object> {
public int Compare(object a, object b) {
.... // a = a.GetType().GetField(field).GetValue(a); - not important for the question but I'm just showing that a&b below are different references
switch (a.GetType().Name) {
case "Byte":
if ((byte)a == (byte)b) return 0;
else if ((byte)a > (byte)b) return 1;
else return -1;
case "UInt16":
if ((ushort)a == (ushort)b) return 0;
else if ((ushort)a > (ushort)b) return 1;
else return -1;
case "SByte":
if ((sbyte)a == (sbyte)b) return 0;
else if ((sbyte)a > (sbyte)b) return 1;
else return -1;
case "Int16":
...
यहाँ मैं एक switch
बयान if
/else
बयान की एक श्रृंखला की तुलना में तेजी होने के लिए कहा जाता है कि उपयोग कर रहा हूँ: यह निम्नलिखित कोड शामिल हैं। लेकिन a.GetType().Name
एक स्ट्रिंग देता है जो गतिशील रूप से प्राप्त होता है और इस विधि में स्ट्रिंग तुलना शामिल होती है। यह मेरे लिए विशेष रूप से तेज़ नहीं लगता है। मुझे तुलनात्मक रूप से तुलनात्मक रूप से तुलना करने की आवश्यकता है क्योंकि यह डेटा के बड़े संग्रह पर उपयोग किया जा रहा है।
प्रश्न: क्या किसी ऑब्जेक्ट के प्रकार को जांचने का कोई तेज़ तरीका है (जिसमें स्ट्रिंग तुलना शामिल नहीं है)? सबसे तेज़ संभव तरीका क्या है?
आप 'तुलनाकर्ता.डिफॉल्ट' की तलाश में हैं। – SLaks
या कॉल ((IComparable) ए) .CompareTo (बी) – usr
नहीं, मैं 'तुलनाकर्ता.फॉल्ट' की तलाश नहीं कर रहा हूं। मैंने इसे और अधिक स्पष्ट करने के लिए अपनी पोस्ट संपादित की है। मेरा सवाल एक प्रकार की जांच करने के लिए एक तेज़ तरीका है। – brandon