2012-01-12 32 views
9

cách dễ nhất để kiểm tra xem typeof() có thể sử dụng toán học (số) hay không.typeof() để kiểm tra các giá trị số

làm tôi cần phải sử dụng TryParse method hay kiểm tra nó bằng cách này:

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; 
    } 

nếu có một cách dễ dàng hơn để đạt được điều này, bạn tự do để đề nghị

+0

Related: http://stackoverflow.com/questions/828807/what-is-the-base-class-for-c-sharp-numeric-value-types –

+0

"Toán học có thể sử dụng" có nghĩa là gì? Là một mảng đôi có thể sử dụng toán học, cho instace? Tôi nghĩ rằng nó là. –

+3

có thể trùng lặp của [Sử dụng. Net, làm thế nào tôi có thể xác định xem một loại có phải là một loại giá trị số không?] (Http://stackoverflow.com/questions/124411/using-net-how-can-i-determine-if-a -type-là-một-số-valuetype) –

Trả lời

10

Không có gì nhiều việc phải làm là, không may . Nhưng từ C# 3 trở đi, bạn có thể làm điều gì đó fancier:

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) 
       ); 
    } 
} 

do đó, mã ban đầu của bạn có thể được viết như thế này:

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

đây là tất cả các loại số đã biết? (ngoại trừ char) là có nhiều hơn? – Moonlight

+0

Không, đây là tập hợp con. Để biết danh sách toàn diện, hãy xem [câu trả lời này] (http://stackoverflow.com/a/5182747/126052) từ một chủ đề khác. Tôi có thể cập nhật câu trả lời của mình sau. – Humberto

+0

tôi đã chỉnh sửa nó cho bạn, thêm một số loại số bổ sung – Moonlight

3

Bạn có thể kiểm tra các giao diện mà các loại số thực hiện:

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

if (data is IComparable) { 
    if (((IComparable)data).CompareTo(42) < 0) { 
    // less than 42 
    } 
} 
Các vấn đề liên quan