NET问答: 是否有通用的方法判断一个 Type 是 Number ?
生活随笔
收集整理的這篇文章主要介紹了
NET问答: 是否有通用的方法判断一个 Type 是 Number ?
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
咨詢區(qū)
Adi Barda:
請(qǐng)問是否有一種方式可以判斷 .NET Type 是一個(gè) number,這里的number不單單是 int ,還有可能是 System.UInt32/UInt16/Double 等等,我真的不想寫那種長(zhǎng)長(zhǎng)的 switch case 來擺平這個(gè)問題。
比如下面的代碼:
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;} }回答區(qū)
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);} }當(dāng) .NET 有新的類型加入時(shí),你也可以非常方便的將其加入到 NumericTypes 中,比如:BigInteger 和 Complex。
Konamiman:
你可以使用 Type.IsPrimitive 并排除掉 Boolean 和 Char 類型,比如下面這樣的簡(jiǎn)單粗暴:
bool?IsNumeric(Type?type) {return?type.IsPrimitive?&&?type!=typeof(char)?&&?type!=typeof(bool); }如果你不認(rèn)為 IntPtr,UintPtr 是 numeric 類型的話,也可以排除掉。
點(diǎn)評(píng)區(qū)
這套題還是挺有意思的,Konamiman 大佬提供的方法簡(jiǎn)潔高效,也并沒有使用反射,而是直接調(diào)取它的 類型句柄 直接判斷,學(xué)習(xí)了!
總結(jié)
以上是生活随笔為你收集整理的NET问答: 是否有通用的方法判断一个 Type 是 Number ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 聊一聊.NET Core结合Nacos实
- 下一篇: BenchmarkDotNet性能测试