.Net判斷一個(gè)對(duì)象是否為數(shù)值類(lèi)型實(shí)例
本文實(shí)例講述了.Net判斷一個(gè)對(duì)象是否為數(shù)值類(lèi)型的方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
.Net判斷一個(gè)對(duì)象是否為數(shù)值類(lèi)型乍一聽(tīng)是個(gè)很簡(jiǎn)單的事,但突然搞起來(lái)還真有點(diǎn)無(wú)從下手的感覺(jué)。
首先當(dāng)然是通過(guò)GetType()方法反射獲取其類(lèi)型信息,然后對(duì)其進(jìn)行分析,但是類(lèi)型信息Type中并沒(méi)有簡(jiǎn)單地給出這么一個(gè)屬性進(jìn)行判斷。
老外給出的方法是:
{
if (dataType == null)
throw new ArgumentNullException("dataType");
return (dataType == typeof(int)
|| dataType == typeof(double)
|| dataType == typeof(long)
|| dataType == typeof(short)
|| dataType == typeof(float)
|| dataType == typeof(Int16)
|| dataType == typeof(Int32)
|| dataType == typeof(Int64)
|| dataType == typeof(uint)
|| dataType == typeof(UInt16)
|| dataType == typeof(UInt32)
|| dataType == typeof(UInt64)
|| dataType == typeof(sbyte)
|| dataType == typeof(Single)
);
}
他是想窮舉比對(duì)所有已知數(shù)值類(lèi)型。。。。這么做應(yīng)該是可以,就是性能差點(diǎn)并且不雅吧。
而且~他好像還忘了Decimal。。。
進(jìn)一步的研究了一下這些數(shù)值類(lèi)型,它們貌似都是結(jié)構(gòu)而非類(lèi),而且都有共同的接口:
IFormattable, IComparable, IConvertible
其中IFormattable接口是數(shù)值類(lèi)型有別于其它幾個(gè)基礎(chǔ)類(lèi)型的接口。
這樣就非常好辦了,代碼如下:
{
return !o.IsClass && !o.IsInterface && o.GetInterfaces().Any(q => q == typeof(IFormattable));
}
另外除了基本類(lèi)型之外還有可空類(lèi)型Nullable<T>,就是常用的例如double?這種,對(duì)于泛型的類(lèi)型的匹配我不知該怎么做才好,趕時(shí)間就沒(méi)深究,用了個(gè)偷懶的方法實(shí)現(xiàn)了:
{
if (!o.Name.StartsWith("Nullable")) return false;
return o.GetGenericArguments()[0].IsNumericType();
}
看吧,只是判斷一下類(lèi)型名稱(chēng)是不是以“Nullable”開(kāi)始,如果是的話(huà)再對(duì)其第一個(gè)泛型參數(shù)類(lèi)型進(jìn)行上面的判斷,這樣肯定不是100%靠譜的,感興趣的朋友可以進(jìn)一步完善一下這個(gè)方法。
希望本文所述對(duì)大家的.net程序設(shè)計(jì)有所幫助。
- ASP.net判斷上傳文件類(lèi)型的三種有效方法
- ASP.NET在上傳文件時(shí)對(duì)文件類(lèi)型的高級(jí)判斷的代碼
- asp.net 下載文件時(shí)根據(jù)MIME類(lèi)型自動(dòng)判斷保存文件的擴(kuò)展名
- Asp.net中判斷一個(gè)session是否合法的方法
- ASP.NET頁(yè)面某些選項(xiàng)進(jìn)行提示判斷具體實(shí)現(xiàn)
- 幾種判斷asp.net中session過(guò)期方法的比較
- asp.net判斷字符串是否是中文的方法
- asp.net中利用正則表達(dá)式判斷一個(gè)字符串是否為數(shù)字的代碼
- asp.net 判斷數(shù)組是否存在某個(gè)值的方法
- Asp.net 基于Cookie簡(jiǎn)易的權(quán)限判斷
- asp.net 用繼承方法實(shí)現(xiàn)頁(yè)面判斷session
- asp.net(c#)判斷遠(yuǎn)程圖片是否存在
相關(guān)文章
詳解ASP.NET Core 之 Identity 入門(mén)(二)
本篇文章主要介紹了ASP.NET Core 之 Identity 入門(mén),主要負(fù)責(zé)對(duì)用戶(hù)的身份進(jìn)行認(rèn)證,有興趣的可以了解一下。2016-12-12
asp.net實(shí)現(xiàn)上傳圖片時(shí)判斷圖片的模式GRB或CMYK的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)上傳圖片時(shí)判斷圖片的模式GRB或CMYK的方法,涉及asp.net針對(duì)圖片的讀取及屬性操作相關(guān)技巧,需要的朋友可以參考下2016-07-07
asp.net MVC利用自定義ModelBinder過(guò)濾關(guān)鍵字的方法(附demo源碼下載)
這篇文章主要介紹了MVC利用自定義ModelBinder過(guò)濾關(guān)鍵字的方法,結(jié)合實(shí)例形式詳細(xì)分析了自定義ModelBinder過(guò)濾關(guān)鍵字的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-03-03
.net core EF Core調(diào)用存儲(chǔ)過(guò)程的方式
這篇文章主要給大家介紹了關(guān)于.net core EF Core調(diào)用存儲(chǔ)過(guò)程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用.net core EF Core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
ASP.NET Core2讀寫(xiě)InfluxDB時(shí)序數(shù)據(jù)庫(kù)的方法教程
Influxdb是一個(gè)開(kāi)源的分布式時(shí)序、時(shí)間和指標(biāo)數(shù)據(jù)庫(kù),使用go語(yǔ)言編寫(xiě),無(wú)需外部依賴(lài),下面這篇文章主要給大家介紹了關(guān)于ASP.NET Core2讀寫(xiě)InfluxDB時(shí)序數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下2018-11-11
ASP.NET顯示農(nóng)歷時(shí)間改進(jìn)版
這篇文章主要介紹了ASP.NET顯示農(nóng)歷時(shí)間改進(jìn)版,是針對(duì)前面一篇ASP.NET顯示農(nóng)歷時(shí)間的改進(jìn)版,實(shí)現(xiàn)了比較簡(jiǎn)單的封裝,增加了易用性,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11
ASP.NET 計(jì)劃任務(wù)實(shí)現(xiàn)方法(不使用外接程序,.net內(nèi)部機(jī)制實(shí)現(xiàn))
在asp.net中要不使用其他插件的情況下只能使用定時(shí)器來(lái)檢查, 并執(zhí)行任務(wù).2011-09-09
asp.net AutoCompleteExtender的一個(gè)簡(jiǎn)單例子代碼
asp.net AutoCompleteExtender的一個(gè)簡(jiǎn)單例子代碼2009-12-12
LiteralControl ASP.NET中的另類(lèi)控件
對(duì)于LiteralControl控件的應(yīng)用比較少,今天突然看到了,就弄個(gè)明白為好,所以總結(jié)出來(lái),供大家一起學(xué)習(xí)2012-01-01

