.net通用類型轉換方法

来源:http://www.cnblogs.com/godbell/archive/2017/07/15/7182719.html
-Advertisement-
Play Games

由於數據類型多,要按照逐個類型寫一個類型轉換的方法的話一是代碼量多,顯得累贅。 ...


由於數據類型多,要按照逐個類型寫一個類型轉換的方法的話一是代碼量多,顯得累贅。

using System;
using System.ComponentModel;
using System.Globalization;

/// <summary>
/// 類型轉換
/// </summary>
/// <param name="value">要轉換的值</param>
/// <param name="destinationType">轉換的目標類型</param>
/// <returns></returns>
public static object To(object value, Type destinationType)
{
    return To(value, destinationType, CultureInfo.InvariantCulture);
}
/// <summary>
/// 類型轉換
/// </summary>
/// <param name="value">要轉換的值</param>
/// <param name="destinationType">轉換的目標類型</param>
/// <param name="culture">區域信息</param>
/// <returns></returns>
public static object To(object value, Type destinationType, CultureInfo culture)
{
    if (value != null)
    {
        var sourceType = value.GetType();

        var destinationConverter = TypeDescriptor.GetConverter(destinationType);
        if (destinationConverter != null && destinationConverter.CanConvertFrom(value.GetType()))
            return destinationConverter.ConvertFrom(null, culture, value);

        var sourceConverter = TypeDescriptor.GetConverter(sourceType);
        if (sourceConverter != null && sourceConverter.CanConvertTo(destinationType))
            return sourceConverter.ConvertTo(null, culture, value, destinationType);

        if (destinationType.IsEnum && value is int)
            return Enum.ToObject(destinationType, (int)value);

        if (!destinationType.IsInstanceOfType(value))
            return Convert.ChangeType(value, destinationType, culture);
    }
    return value;
}
/// <summary>
/// 類型轉換
/// </summary>
/// <typeparam name="T">目標類型</typeparam>
/// <param name="value">要轉換的值</param>
/// <returns></returns>
public static T To<T>(object value)
{
    return (T)To(value, typeof(T));
}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • FPM工具 支持的源類型包 dir 將目錄打包成所需要的類型。可以用於源碼編譯安裝後的軟體包 rpm 對rpm進行轉換 gen 對rubygem包進行轉換 python 將python模塊打包成相應的類型 支持的目標類型包 rpm 轉換成rpm包 deb 轉換成deb包 solaris 轉換成sol ...
  • 剛接觸MVC+EF框架不久,但一直很困惑的就是控制器能否及如何向視圖傳遞匿名類數據。寶寶表示很討厭去新建實體類啦,查詢稍有不同就去建一個實體類不是很麻煩嗎,故趁陽光正好,周末睡到自然醒後起來嘗試了之前一直在博客園看到的實現方式:英明神武的Tuple類,第一次對微軟欽佩之至。故做如下記錄,方便自己之後 ...
  • 博客里的好多文章都是本人看著比較好,就轉過來的,好少自己親自去寫點什麼,也很少把自己學的一點心得於大家分享,今天特別想聊一下,關於本人做Net開發時的那段回憶! 一、關於知識的回憶 還記得Handlere嗎? 我記得Handler做圖片防盜鏈時,有這麼一個功能! 還記得Module嗎?那時我們做過I ...
  • 這個月我們做了一件別人看起來很瘋狂的事情,就是讓一批95後的實習生實行遠程辦公,效果還不錯,於是寫此文總結一下。我們還會繼續對asp.net mvc\C#技術棧的95後實習生實行遠程辦公的 ...
  • 今天在用python實現爬蟲的時候,就想看一下用c#實現同樣的功能到底會多出來多少code,結果寫著寫著乾脆把頁面也簡單的寫一個出來,方便調試, 大致流程如下: 1.分析拉勾數據 2.查找拉勾做了哪些反爬蟲限制 3.抓取數據,show page 過程中用到一個HtmlAgilityPack第三方庫, ...
  • Windows Server 2012+ASP.NET +Mysql 最近用戶量突破10+以上,最大併發1300+ 資料庫CPU居高不下,一時達到100%臨界點,導致很多SQL命令執行發生錯誤,連接拒絕。 ...
  • 在上一篇我們在菜單欄創建了一個菜單,菜單上顯示了一個圖標跟文本。那麼我們自己創建的菜單如何修改自定義的菜單圖標呢。下麵娓娓道來。。。。。 首先你要有一個圖,創建一個32位的點陣圖。這個點陣圖的像素是16px 16px,或者是16px 16px的倍數。 每個圖標都放在單個行中彼此相鄰的點陣圖上。使用Alph ...
  • 最近有接觸到關於visual studio 2017 擴展的開發,特此記錄,也是為了督促自己去深入瞭解其原理。 開始開發Visual Studio 擴展,在這裡我安裝了visual studio 2017, 在安裝的時候記得勾選上visual studio 擴展開發。 創建一個項目 我們打開編譯器, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...