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

咨询区

  • 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 大佬提供的方法简洁高效,也并没有使用反射,而是直接调取它的 类型句柄 直接判断,学习了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

史上最污技术解读,我竟然秒懂了!

全世界只有3.14 % 的人关注了数据与算法之美或许有不少人对热备&#xff0c;冷备&#xff0c;云备了解不深。今天&#xff0c;数据汪就给大伙科普一下 IT 行业各种备份术语&#xff0c;以后别闹笑话了。1.冷备份假设你是一位女性&#xff0c;你有一位男朋友&#xff0c;于此同时…

深入了解Oracle ASM(一):基础概念

ASM基础概念 任何转载请注明源地址&#xff0c;否则追究法律责任&#xff01;&#xff1a;http://www.askmaclean.com/archives/know-oracle-asm.html 相关文章链接&#xff1a; Asm Instance Parameter Best Practice 为什么RHEL 6上没有ASMLIB? Unix上如何查看文件名开头…

linux免费日志分析工具,分享10个优秀的日志分析工具

原标题&#xff1a;分享10个优秀的日志分析工具在网络管理员的日常工作中&#xff0c;对日志文件的分析能够及时了解网络设备或应用的性能数据&#xff0c;以便及时发现问题并及时解决。分析日志文件的时候需要运用到日志分析工具&#xff0c;接下来小编就给大家分享10个优秀的…

BenchmarkDotNet性能测试

BenchmarkDotNet是一款开源的性能测试工具&#xff0c;使用方式非常简单&#xff0c;特别是对实现同一功能的两种方式&#xff0c;犹豫不决时&#xff0c;可以使用它进行个对比。比如我们比较ADO.NET方式查询数据库表&#xff0c;和用Dapper方式获取数据为表&#xff0c;只需要…

每日一笑 | 程序员的日常,这也太真实了......

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

【转载】分布式系统的理解

2019独角兽企业重金招聘Python工程师标准>>> 1. 如何理解“分布式”&#xff1f; 经常听到”分布式系统“&#xff0c;”分布式计算“&#xff0c;”分布式算法“。分布式的具体含义是什么&#xff1f;狭义的分布是指&#xff0c;指多台PC在地理位置上分布在不同的…

小米开招.NET,20~40k*16薪,点名要求WPF+自动化!

近期小米发布了深圳南山区的C#工程师招聘岗位&#xff0c;20~40k*14薪的待遇让人心动&#xff0c;其核心技术要求再WPF、MVVM、自动化设备、本地数据库等&#xff0c;有没有发现什么秘密&#xff1f;互联网造车&#xff01;物联网终极形态自今年3月份小米宣布要造车&#xff0c…

linux内核线程socket,从Linux源码看Socket(TCP)的accept

从Linux源码看Socket(TCP)的accept前言笔者一直以为若是能知道从应用到框架再到操做系统的每一处代码&#xff0c;是一件Exciting的事情。 今天笔者就从Linux源码的角度看下Server端的Socket在进行Accept的时候到底作了哪些事情(基于Linux 3.10内核)。html一个最简单的Server端…

豆瓣最高评分8.9!让你拥有“多样性思维”

▲数据汪特别推荐点击上图进入玩酷屋01表象与本质我们的大脑是如何工作的&#xff1f;所谓的类比到底是什么?我们是怎么在截然不同的情景间建立起联系的&#xff1f;类比在学习的过程中发挥着怎样的作用&#xff1f;人类大脑中的每个概念都源于多年来不知不觉中形成的一长串类…

引号(反引号、$()符号)

2013年3月19日 星期二 中午小雪 引号 1、单引号 [rootdesktop7 ~]# echo \$a \$a [rootdesktop7 ~]# echo "\\\$a" \$a 单引号&#xff1a;转义单引号中的所有字符含义 赋值验证 [rootdesktop7 ~]# a88 [rootdesktop7 ~]# echo "$a" 88 [rootdesktop7 ~]# …

复仇!3:1 KO叙利亚!.NET程序员用算法推演出国足进世界杯概率...

6月16日凌晨2点&#xff0c;国足在阿联酋沙迦体育场迎战卡塔尔世预赛亚洲区40强赛最后一个对手&#xff0c;已经锁定小组头名并出线的劲敌叙利亚队&#xff0c;上半场艾克森中框&#xff0c;武磊送助攻&#xff0c;张稀哲打破僵局&#xff0c;下半场奥斯曼扳平比分&#xff0c;…

linux终端背景透明度设置,Ubuntu Terminal标签背景颜色设置

使用ubuntu以来一直苦于terminal标签颜色差距太小&#xff0c;有时候根本不知道自己在哪个标签下&#xff0c;于是在网上搜索如何设置背景颜色可以让标签便于区分&#xff0c;现总结如下&#xff1a;1.打开gtk-widgets.cssvim /usr/share/themes/Ambiance/gtk-3.0/gtk-widgets.…

快速入门人工智能,这波福利不能错过!

不知不觉&#xff0c;寒假就这样溜走了&#xff0c;看着这个寒假养肥的膘&#xff0c;嗯~又是一个充实的假期。不少同学踏上返校之路&#xff0c;迎来新学期&#xff01;新学期&#xff0c;当然少不了小天的陪伴啦&#xff01;早春开学季&#xff0c;小天送福利&#xff0c;福利…

从代码角度揭示:华为鸿蒙的“套壳”真相!

华为鸿蒙操作系统&#xff08;HarmonyOS&#xff09;出来后&#xff0c;互联网上已经吵翻天了&#xff0c;有人认为HarmonyOS是“自主的全场景分布式系统”&#xff0c;是国产之光&#xff0c;另一派则认为HarmonyOS是“Android套壳”&#xff0c;是挂羊头卖狗肉。作为十年老程…

linux进化树分析的软件,一款好用的进化树可视化编辑软件

原标题&#xff1a;一款好用的进化树可视化编辑软件iTOL(Interactive Tree Of Life)是一个在线显示和操作的进化树工具。我们可以添加很多自定义的项目&#xff0c;丰富和完善自己的进化树&#xff0c;比如添加柱状图、蛋白结构域、heatmap、基因平行转移(horizontal gene tran…

django与easyui使用过程中遇到的问题

最近要使用django前台用easyui&#xff0c;发现当从后台获取数据过程中会出现跨域问题。 多次尝试后发现将ajax的方法设置为GET就没问题了 代码如下&#xff1a; $(#syslog_1).datagrid({url:/bookapp/book/test/,toolbar:#toolbar,fitColumns:true, iconCls:ic…

每日一笑 | 床上还是桌上,你总得选一样~

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图片来源于网络&#xff0c;侵权删&#xff09;

linux端口 fcs校验,我如何接收错误的以太网帧并禁用CRC / FCS计算?

你没有指定哪个操作系统&#xff0c;但我至少可以为Linux发言&#xff1a;它可能在你的内核&#xff0c;网卡和驱动程序以及ethtool版本。我们需要告诉驱动程序/硬件做两件事情&#xff0c;通常不这样做&#xff1a;1)将FCS字段传递给网络堆栈。 (通常在传递之前被截断)2)不丢弃…

Redis分布式锁抽丝剥茧

之前码甲哥写了两篇有关线程安全的文章&#xff1a;•你管这叫线程安全&#xff1f;•.NET八股文&#xff1a;线程同步技术解读分布式锁是"线程同步"的延续最近首度应用"分布式锁"&#xff0c;现在想想&#xff0c;分布式锁不是孤立的技能点&#xff0c;这…

MFC,QT与WinForm,WPF简介

编程语言的组成 编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了,听说读写.而使用相同语言的人大脑里都有个翻译器,可以把自己的想法翻…