我需要简单的条件来替换这个(不完整的)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
?
答案 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
)
)