咨询区

  • Adi Barda

请问是否有一种方式可以判断 .NET Type 是一个 number,这里的number不单单是 int ,还有可能是 System.UInt32/UInt16/Double 等等,我真的不想写那种长长的 switch case 来摆平这个问题。

比如下面的代码:


public static bool IsNumericType(this object o)
{   switch (Type.GetTypeCode(o.GetType())){case TypeCode.Byte:case TypeCode.SByte:case TypeCode.UInt16:case TypeCode.UInt32:case TypeCode.UInt64:case TypeCode.Int16:case TypeCode.Int32:case TypeCode.Int64:case TypeCode.Decimal:case TypeCode.Double:case TypeCode.Single:return true;default:return false;}
}

回答区

  • Jon Skeet

如果你不想使用 switch,可以用 HashSet 或者 Dictionary 来替代,参考如下代码:


public static class TypeHelper
{private static readonly HashSet<Type> NumericTypes = new HashSet<Type>{typeof(int),  typeof(double),  typeof(decimal),typeof(long), typeof(short),   typeof(sbyte),typeof(byte), typeof(ulong),   typeof(ushort),  typeof(uint), typeof(float)};public static bool IsNumeric(Type myType){return NumericTypes.Contains(Nullable.GetUnderlyingType(myType) ?? myType);}
}

当 .NET 有新的类型加入时,你也可以非常方便的将其加入到 NumericTypes 中,比如:BigInteger 和 Complex。

  • Konamiman

你可以使用 Type.IsPrimitive 并排除掉 BooleanChar 类型,比如下面这样的简单粗暴:


bool IsNumeric(Type type)
{return type.IsPrimitive && type!=typeof(char) && type!=typeof(bool);
}

如果你不认为 IntPtr,UintPtr 是 numeric 类型的话,也可以排除掉。

点评区

这套题还是挺有意思的,Konamiman 大佬提供的方法简洁高效,也并没有使用反射,而是直接调取它的 类型句柄 直接判断,学习了!

NET问答: 是否有通用的方法判断一个 Type 是 Number ?相关推荐

  1. Java(实验一)身体质量指数(BMI,Body Mass Index)是国际上常用的衡量人体肥胖程度和是否健康的重要标准,它用如下方法判断一个成年人的肥胖程度

    一.实验目的: 1.熟悉Java应用程序编写.编译与运行流程. 2.熟悉Java程序基本结构,能够编写最简单的Java程序. 3.掌握一种Java的标准输入输出处理方法. 4.学会编写包含选择与循环结 ...

  2. 写一个方法判断一个字符串是否对称_判断一个男生是否好色的方法

    ▾ 我们店只招黑喵哦? ▾ 其实也不是不能理解为什么男的要跑? ▾ 有什么相见恨晚的小知识?? ▾ 见证奇迹?:是不是穿过去了!? ▾ 医学奇迹? ▾ 卧槽流劈!?真的超光速了! ▾ 细节很到位啊几位 ...

  3. 地图处理方法-判断一个点是否在某个区域内

    判断一个点是否在某个区域内(多边形) 背景: 比如滴滴会根据乘客所在的不同区域,给出不同的价格.市区堵一点,那么价格也高点.获取服务范围只规定在某个范围内 原理: 求解从该点向右发出的水平线射线与多边 ...

  4. 两种方法判断一个字符串是否为另外一个字符串旋转之后的字符串。(C语言)...

    例如:给定s1 = AABCD和s2 = BCDAA,返回1 给定s1 = abcd和s2 = ACBD,返回0. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 第一种: ...

  5. 产品经理必须知道的一点知识:三种方法判断一个产品该不该做

    前言 想明白为什么不要做这个产品 有时候可能比为什么要做这个产品更加重要,因为在错误的道路走的越远,伤害就越大. - 1 -这个产品有无降低交易成本 简单来说就是为了达成一笔交易 买卖双方要付出的时间 ...

  6. 写一个方法判断一个整数是否为质数_请写一个函数来检查用户提交的数据是否为整数...

    请写一个函数来检查用户提交的数据是否为整数(不区分数据类型,可以为二进制.八进制.十进制.十六进制数字) 1.is_integer 是 is_int() 的别名,是一样的 2.is_int/is_in ...

  7. 用最简单的方法判断一个LONG整形的数A是2^n(2的n次方)

    如果一个数是2的n次方,则化成二进制数肯定是 1000...000 的形式,那么 假设这个数是x,则 x-1 肯定是 0111...111 的形式,位数比x少一位 那么 x & (x-1) 则 ...

  8. python判断ip地址是否合法_python实现判断一个字符串是否是合法IP地址的示例

    一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python #encoding:utf-8 ''' __Author__:沂水寒城 功能:判断一个字符串是否是合法I ...

  9. aspx 判断字符串是否为decimal_python实现判断一个字符串是否是合法IP地址

    一个刚结束的笔试题目,简单贴一下吧,下面是具体实现: #!usr/bin/env python#encoding:utf-8 '''__Author__:沂水寒城功能:判断一个字符串是否是合法IP地址 ...

最新文章

  1. @angular/compiler-cli@4.3.6 requires typescript@'=2.1.0 2.4.0' but 2.5.2 was found instead.
  2. 互联网公司之外,银联等大型企业是如何玩转软件研发的?
  3. NUC120 SPI 模拟I2S
  4. 马云最怕的事还是来了,央行对借呗动真格!
  5. Julia 向 Python 宣战!
  6. 学python有前途吗-三十岁了,从零开始学python还有前途吗?
  7. python colorbar刻度_matplotlib画3D图修改X,Y,Z,colorbar的刻度值
  8. python php mysql_Python 操作 MySQL 的正确姿势
  9. 传智播客扫地僧C/C++学习 数据类型的本质
  10. jeecg-boot配置菜单
  11. 2011年1月31日nod32id,nod32免费激活码_NOD32用户名密码
  12. 【学渣告诉你】到底神马是傅里叶级数!!!!!!
  13. 矸石称重自动化系统有什么功能性要求
  14. Yolov5检测并生成文本及标签文件
  15. 删除+mysql+用户密码_误删除mysql中的所用用户,如何重新设置root账号和密码
  16. 关于Integer和int
  17. 【入门级】学习卡尔曼滤波
  18. 三个步骤 让你学会看懂考研数学课本
  19. 乐思蜀:我们不做网络民工
  20. 在自启动的.rc文件中添加服务

热门文章

  1. sql2005数据导入出错问题
  2. linux 运行apj,pxe+ris-linux实现在DELL R710上网络安装windows2003
  3. python在运维自动化的前景_现在学运维自动化python和大数据?
  4. spring security config
  5. 特殊的求和(函数和循环)
  6. 使用jquery+css实现瀑布流布局
  7. 部署也是工程的一部分,也要编程(自动化)
  8. java windows 取所有任务_Win下,通过Jstack截取Java进程中的堆栈信息
  9. linux系统输入指令,详解linux系统输入输出管理和vim的常用功能
  10. 接收上传的multi-file的文件(四)