如何检查列是否可以转换为double? (DataTable.Column.DataType)

时间:2013-04-25 11:14:31

标签: c# if-statement types

我需要简单的条件来替换这个(不完整的)if条件。

// i dont want to write all possible data types
if (col.DataType == typeof(int) || col.DataType == typeof(int64) ... all types)
{
    // i want to do something on numeric columns
    // (convert all numbers to double datatype)
}
else
{
    // string and other non-numbers will remain unchanged
}

我正在尝试这样的事情:

col.DataType.IsNumeric()

但该课程中没有这样的方法。

我无法对数据使用TryParse()方法,因为数据太多了。

条件必须仅由DataTable列数据类型属性确定。

是否有简化方法来简化我的if

3 个答案:

答案 0 :(得分:4)

您可以像使用DataType一样使用DataType,或者创建一个函数来执行此操作(请参阅此Determine if DataColumn is numeric):

public static bool IsNumeric(this DataColumn col) {

  if (col == null)
    return false;

  // all numeric types
  var numericTypes = new [] { typeof(Byte), typeof(Decimal), typeof(Double),
        typeof(Int16), typeof(Int32), typeof(Int64), typeof(SByte),
        typeof(Single), typeof(UInt16), typeof(UInt32), typeof(UInt64)};

  return numericTypes.Contains(col.DataType);
}

并使用

if (col.IsNumeric()) 
{
   // the column is numeric
}

现在,对于列的内容,您可以尝试使用double.TryParse()方法,如下所示:

double temp;
if (double.TryParse(col["Column"].ToString(), out temp))
{
  // the content can be converter and you can read it from temp variable.
}

答案 1 :(得分:1)

您还可以查看DataColumn.DataType.Name属性。喜欢:

string[] IntType ={"Byte","Decimal","Double","Int16","Int32","SByte",
                "Single","UInt16","UInt32","UInt64"};

static void Main(string[] args)
{
    DataTable dt = new DataTable();
    dt.Columns.Add("num", typeof(int));
    dt.Columns.Add("str", typeof(string));
    Program p=new Program();
    string type = dt.Columns["num"].DataType.Name;
    if (p.IntType.Contains(type))
    {
        //True
    }

}

答案 2 :(得分:0)

你可以试试这个:

if(Microsoft.VisualBasic.Information.IsNumeric
    (
     Activator.CreateInstance(col.DataType
    )
   )