2012-01-12 23 views
9

यह जांचने का सबसे आसान तरीका क्या है कि कोई प्रकार() गणितीय रूप से प्रयोग योग्य (संख्यात्मक) है।संख्यात्मक() संख्यात्मक मानों की जांच करने के लिए

मैं TryParse method का उपयोग करें या इस से यह जांच करने की आवश्यकता है:

if (!(DC.DataType == typeof(int) || DC.DataType == typeof(double) || DC.DataType == typeof(long) || DC.DataType == typeof(short) || DC.DataType == typeof(float))) 
    { 
      MessageBox.Show("Non decimal data cant be calculated"); 
      return; 
    } 

इस लक्ष्य को हासिल करने के लिए एक और अधिक आसान तरीका है, वहाँ है अगर आपके

+0

संबंधित: http://stackoverflow.com/questions/828807/what-is-the-base-class-for-c-sharp-numeric-value-types –

+0

"गणितीय उपयोग करने योग्य" का क्या अर्थ है? इंस्टेंस के लिए गणितीय रूप से उपयोग करने योग्य युगल की एक सरणी है? मुझे लगता है ऐसा है। –

+3

संभावित डुप्लिकेट [.NET का उपयोग करके, मैं कैसे निर्धारित कर सकता हूं कि कोई प्रकार एक संख्यात्मक ValueType है?] (Http://stackoverflow.com/questions/124411/using-net-how-can-i-determine-if-a -टाइप-ए-न्यूमेरिक-वैल्यूटाइप) –

उत्तर

10

सुझाव देने के लिए ज्यादा कुछ नहीं करना है, दुर्भाग्य से मुक्त ।

public static class NumericTypeExtension 
{ 
    public static bool IsNumeric(this Type dataType) 
    { 
     if (dataType == null) 
      throw new ArgumentNullException("dataType"); 

     return (dataType == typeof(int) 
       || dataType == typeof(double) 
       || dataType == typeof(long) 
       || dataType == typeof(short) 
       || dataType == typeof(float) 
       || dataType == typeof(Int16) 
       || dataType == typeof(Int32) 
       || dataType == typeof(Int64) 
       || dataType == typeof(uint) 
       || dataType == typeof(UInt16) 
       || dataType == typeof(UInt32) 
       || dataType == typeof(UInt64) 
       || dataType == typeof(sbyte) 
       || dataType == typeof(Single) 
       ); 
    } 
} 

तो अपने मूल कोड इस तरह लिखा जा सकता है:: लेकिन सी # 3 के बाद से, आप अधिक सजावटी कुछ कर सकते हैं

if (!DC.DataType.IsNumeric()) 
{ 
     MessageBox.Show("Non decimal data cant be calculated"); 
     return; 
} 
+0

संपादित करूँगा ये सभी ज्ञात संख्यात्मक प्रकार हैं? (चार को छोड़कर) और अधिक हैं? – Moonlight

+0

नहीं, यह सबसेट है। एक व्यापक सूची के लिए, [यह जवाब] देखें (http://stackoverflow.com/a/5182747/126052) किसी अन्य विषय से। मैं बाद में अपना जवाब अपडेट कर सकता हूं। – Humberto

+0

मैंने इसे आपके लिए संपादित किया, कुछ अतिरिक्त संख्यात्मक प्रकार जोड़े – Moonlight

3

आप इंटरफेस है कि संख्यात्मक प्रकारों का कार्यान्वयन के लिए जाँच कर सकते हैं:

if (data is IConvertible) { 
    double value = ((IConvertible)data).ToDouble(); 
    // do calculations 
} 

if (data is IComparable) { 
    if (((IComparable)data).CompareTo(42) < 0) { 
    // less than 42 
    } 
} 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^