首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定DataColumn是否为数字

确定DataColumn是否为数字
EN

Stack Overflow用户
提问于 2009-11-13 06:37:36
回答 3查看 44.2K关注 0票数 16

有没有比这更好的方法来检查DataTable中的DataColumn是否为数字(来自SQL Server数据库)?

代码语言:javascript
复制
  Database db = DatabaseFactory.CreateDatabase();
  DbCommand cmd = db.GetStoredProcCommand("Get_Some_Data");
  DataSet ds = db.ExecuteDataSet(cmd);

  foreach (DataTable tbl in ds.Tables) {
    foreach (DataColumn col in tbl.Columns) {
      if (col.DataType == typeof(System.Single)
        || col.DataType == typeof(System.Double)
        || col.DataType == typeof(System.Decimal)
        || col.DataType == typeof(System.Byte)
        || col.DataType == typeof(System.Int16)
        || col.DataType == typeof(System.Int32)
        || col.DataType == typeof(System.Int64)) {
        // this column is numeric
      } else {
        // this column is not numeric
      }
    }
  }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-13 07:04:58

除了将其与实际类型进行比较之外,没有好的方法来检查类型是否为数字类型。

如果数字的定义有点不同,这一点尤其正确(在您的例子中,根据代码,-无符号整数不是数字)。

另一件事是DataColumn.DataType according to MSDN只支持以下类型:

  • Boolean
  • Byte
  • Char
  • DateTime

粗体的类型是数字(根据我的定义),所以您需要确保检查它们。

我个人会为DataColumn类型编写一个扩展方法(而不是为该类型!)。

我讨厌if...then..else,所以我使用基于集合的方法,如下所示:

代码语言:javascript
复制
public static bool IsNumeric(this DataColumn col) {
  if (col == null)
    return false;
  // Make this const
  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);
}

它的用法是:

代码语言:javascript
复制
if (col.IsNumeric()) ....

这对我来说很简单

票数 40
EN

Stack Overflow用户

发布于 2013-09-23 18:53:50

另一种不使用数组的方法,只需一行代码:

代码语言:javascript
复制
return col != null && "Byte,Decimal,Double,Int16,Int32,Int64,SByte,Single,UInt16,UInt32,UInt64,".Contains(col.DataType.Name + ",");

这行代码既可以用作普通的帮助器方法,也可以用作扩展方法。

票数 2
EN

Stack Overflow用户

发布于 2009-11-13 06:51:31

也许你可以让它变得更短:

代码语言:javascript
复制
System.Type theType = col.DataType AS System.Type
if(theType  == System.Single || theType  == System.Double...) {}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1725903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档