C#中的Converter詳解

Converter是C#中一個非常有用的概念,主要用于類型轉換。它通常以委托或接口的形式出現,允許開發者定義如何將一種類型轉換為另一種類型。下面我將詳細介紹Converter的概念、使用場景,并以布爾型轉換為例展示具體應用。

Converter的基本概念

1. Converter委托

在C#中,Converter<TInput, TOutput>是一個泛型委托,定義在System命名空間中。它的簽名如下:

public delegate TOutput Converter<in TInput, out TOutput>(TInput input);

這個委托表示一個方法,該方法將對象從TInput類型轉換為TOutput類型。

2. 使用場景

Converter常用于:

  • 集合類型轉換

  • 數據格式化

  • 類型適配

  • 值轉換(如字符串到布爾值)

布爾型轉換示例

示例1:簡單的字符串到布爾值轉換

// 定義轉換器
Converter<string, bool> stringToBoolConverter = s => s.Equals("true", StringComparison.OrdinalIgnoreCase) || s.Equals("1", StringComparison.OrdinalIgnoreCase) || s.Equals("yes", StringComparison.OrdinalIgnoreCase);// 使用轉換器
string input = "Yes";
bool result = stringToBoolConverter(input);
Console.WriteLine(result); // 輸出: True

示例2:使用Array.ConvertAll方法轉換數組

string[] stringBools = { "true", "False", "1", "0", "yes", "no" };// 使用Array.ConvertAll和自定義轉換器
bool[] boolArray = Array.ConvertAll(stringBools, stringToBoolConverter);foreach (bool b in boolArray)
{Console.Write(b + " "); // 輸出: True False True False True False
}

示例3:自定義轉換器類

public class BoolConverter : IConverter<string, bool>
{public bool Convert(string input){return input switch{"true" or "1" or "yes" => true,"false" or "0" or "no" => false,_ => throw new ArgumentException("Invalid boolean string")};}
}// 使用
var converter = new BoolConverter();
bool value = converter.Convert("yes"); // 返回true

其他常見轉換場景

示例4:數字到布爾值轉換

Converter<int, bool> intToBoolConverter = i => i != 0;Console.WriteLine(intToBoolConverter(0));    // False
Console.WriteLine(intToBoolConverter(1));    // True
Console.WriteLine(intToBoolConverter(-5));   // True

示例5:對象到布爾值轉換(處理可能為null的情況)

Converter<object, bool> objectToBoolConverter = o => o != null && (o.ToString().Equals("true", StringComparison.OrdinalIgnoreCase) || o.ToString() == "1");Console.WriteLine(objectToBoolConverter(null));         // False
Console.WriteLine(objectToBoolConverter("TRUE"));       // True
Console.WriteLine(objectToBoolConverter(1));            // True

示例6:使用內置的Boolean.Parse和Boolean.TryParse

// 直接使用內置方法
Converter<string, bool> builtInConverter = bool.Parse;try
{Console.WriteLine(builtInConverter("True"));  // TrueConsole.WriteLine(builtInConverter("abc"));  // 拋出FormatException
}
catch (FormatException)
{Console.WriteLine("Invalid boolean format");
}// 更安全的TryParse版本
string input = "abc";
if (bool.TryParse(input, out bool result))
{Console.WriteLine(result);
}
else
{Console.WriteLine("Conversion failed");
}

高級應用場景

示例7:在LINQ中使用轉換器

List<string> stringList = new List<string> { "true", "false", "1", "0" };// 使用ConvertAll方法
List<bool> boolList = stringList.ConvertAll(stringToBoolConverter);// 或者使用LINQ Select
List<bool> boolList2 = stringList.Select(s => stringToBoolConverter(s)).ToList();

示例8:可配置的轉換器

public class ConfigurableBoolConverter
{private readonly string[] _trueValues;private readonly string[] _falseValues;public ConfigurableBoolConverter(string[] trueValues, string[] falseValues){_trueValues = trueValues;_falseValues = falseValues;}public bool Convert(string input){if (_trueValues.Contains(input, StringComparer.OrdinalIgnoreCase))return true;if (_falseValues.Contains(input, StringComparer.OrdinalIgnoreCase))return false;throw new ArgumentException($"Cannot convert '{input}' to boolean");}
}// 使用
var converter = new ConfigurableBoolConverter(trueValues: new[] { "on", "yes", "1" },falseValues: new[] { "off", "no", "0" });Console.WriteLine(converter.Convert("on"));   // True
Console.WriteLine(converter.Convert("off"));  // False

總結

C#中的Converter模式提供了靈活的類型轉換機制,特別適用于:

  1. 需要將一種類型集合轉換為另一種類型集合時

  2. 處理用戶輸入或外部數據源的不一致格式時

  3. 需要在不同系統或組件間轉換數據格式時

  4. 需要可配置或可擴展的轉換邏輯時

對于布爾型轉換,Converter特別有用,因為布爾值在不同上下文中可能有多種表示形式(如"true"/"false"、"yes"/"no"、1/0等)。通過使用Converter,可以集中管理這些轉換邏輯,提高代碼的可維護性和一致性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/87041.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/87041.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/87041.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LabVIEW熒光微管圖像模擬

利用LabVIEW平臺&#xff0c;集成 PI 壓電平臺、Nikon 熒光顯微鏡及Andor sCMOS 相機等硬件&#xff0c;構建熒光微管滑行實驗圖像序列模擬系統。通過程序化模擬微管運動軌跡、熒光標記分布及顯微成像過程&#xff0c;為生物醫學領域微管跟蹤算法測試、運動特性分析提供標準化仿…

CentOS下Nginx服務器搭建全攻略

Nginx 安裝與配置完整指南 一、安裝 Nginx 1.1 添加 Nginx 官方倉庫 在 CentOS 系統中&#xff0c;默認倉庫的 Nginx 版本可能較舊&#xff08;通常為 1.12 或更早版本&#xff09;&#xff0c;建議添加官方倉庫來安裝最新穩定版本&#xff08;目前為 1.25.x&#xff09;&am…

網絡拓撲圖繪制全流程:從架構解析到工具實戰

在數據呈現與系統管理中&#xff0c;清晰展示設備間的邏輯關系至關重要。網絡拓撲圖正是這樣一種有效的可視化工具。它通過節點設備和連接線路&#xff0c;直觀呈現網絡結構或項目流程中各元素的布局與交互關系&#xff0c;幫助理解系統運作、診斷問題并確保項目順利進行。 1. …

Git 簡介安裝教程

&#x1f4e2;歡迎點贊&#x1f44d;收藏?留言&#x1f4dd;如有錯誤敬請指正&#xff01; 目錄 一、Git 的安裝1.1 Git 的下載1.2 Git 的安裝1.2.1 使用許可聲明1.2.2 選擇安裝目錄1.2.3 選擇安裝組件1.2.4 選擇開始菜單文件夾1.2.5 選擇 Git 默認編輯器1.2.6 決定初始化新項…

鴻蒙NEXT-鴻蒙三層架構搭建,嵌入HMRouter,實現便捷跳轉,新手攻略。(2/3)

在上一小節我們已經完成了關于三層架構的搭建&#xff0c;接下來我們來實現在三層架構中的導入依賴&#xff0c;將他們相互聯系起來。 第一步&#xff1a;在features產品定制層中&#xff0c;對其中所有的動態共享包導入依賴&#xff0c;示例features>my>oh-package.jso…

【每天一個知識點】語料投毒(Corpus Poisoning)

“語料投毒”&#xff08;Corpus Poisoning&#xff09; 是指攻擊者通過向大型語言模型&#xff08;如 ChatGPT&#xff09;使用的外部知識庫中注入惡意或誤導性文檔&#xff0c;從而干擾模型的檢索與回答過程&#xff0c;導致其輸出錯誤、虛假或有害內容。 &#x1f50d; 舉個…

疏通經脈: Bridge 聯通邏輯層和渲染層

本節概述 經過前面兩節的開發&#xff0c;我們已經完成了小程序邏輯線程和 UI 線程的啟動引擎準備&#xff0c;這節開始&#xff0c;我們將完善 native bridge 層的搭建&#xff0c;構建起邏輯線程和UI線程之間的橋梁。 開始之前我們先來回顧一下邏輯引擎小節相關的流程圖: 一…

【攻防篇】解決:阿里云docker 容器中自動啟動xmrig挖礦

解決&#xff1a;阿里云服務器docker容器被植入挖礦程序 **1. 緊急處理&#xff1a;停止挖礦進程****&#xff08;1&#xff09;查找并終止 xmrig 進程****&#xff08;2&#xff09;刪除惡意文件** **2. 清理被感染的容器****&#xff08;1&#xff09;停止并刪除容器****&…

對稱非對稱加密,https和http,https通訊原理,Charles抓包原理

文章目錄 對稱加密的非對稱加密http和https原理TCP三次握手四次揮手https通訊流程&#xff1a;Charles抓包原理 對稱加密的非對稱加密 對稱加密&#xff1a;發送方的接收方式使用同一個秘鑰進行加密和解密&#xff0c;發送方將需要發送的數據&#xff0c;選擇某種加密算法&…

Kubernetes(K8s)_15_調度原理

文章目錄 Pod調度實現原理調度隊列優先隊列底層數據 調度緩存調度框架 Pod調度 Pod調度: 通過污點、容忍度和親和性影響Pod的調度 調度器實現, 其基于配置器構造(其配置來源于配置API)調度過程中任何插件返回拒絕, 都會導致Pod可能再次返回調度隊列 如: Pod調度簡略流程 調度…

moduo之tcp客戶端TcpClient

結構 #mermaid-svg-muvN6eOMXA4rCyXP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-muvN6eOMXA4rCyXP .error-icon{fill:#552222;}#mermaid-svg-muvN6eOMXA4rCyXP .error-text{fill:#552222;stroke:#552222;}#merm…

中國科技術語雜志中國科技術語雜志社中國科技術語編輯部2025年第3期目錄

理論研究 認知術語學與社會認知術語學比較研究 吳小芳; 3-11 大語言模型背景下的術語翻譯研究&#xff1a;現狀、問題與展望 朱玉彬;王梓; 12-20 航空事件謠言敘事中的術語初探 劉成盼;劉東亮; 21-28 定名研討 淺談訓詁、訓詁學和訓詁學術語 林童; 29-35 …

自然語言處理NLP期末復習

目錄 第一章1. NLP的基本過程包括哪些-自然語言處理面臨的困難是什么2. 自然語言處理算法定義&#xff0c;過程和應用3. 結合自己的研究-描述研究中涉及的自然語言處理模型或算法&#xff0c;模型或算法原理&#xff0c;具體的處理過程4. 自然語言處理的的兩大核心任務是5. 程序…

單片機 - STM32F103“復用功能重映射”完整解析:從JTAG釋放到TIM重映射實戰詳解

本文將詳細講解 STM32F103 系列中常見的“復用功能重映射”&#xff08;Remap&#xff09;機制&#xff0c;包括 JTAG 占用、引腳默認功能與復用功能的關系&#xff0c;以及如何通過寄存器或標準庫代碼實現重映射。以 TIM3 在 PB4/PB5 上輸出 PWM 為例&#xff0c;進行實戰講解…

【C語言】知識總結·內存函數

目錄 前言&#xff1a; 一、內存復制函數 1. memcpy - 內存塊復制 2. memmove - 內存塊移動 二、內存設置函數 1. memset - 內存塊填充 三、內存比較函數 1. memcmp 2.memchr 三內存分配函數 1 .malloc 2.free 總結&#xff1a; 注意事項&#xff1a; 前言&…

python+uniapp基于微信小程序面向品牌會員的在線商城系統

文章目錄 具體實現截圖本項目支持的技術路線源碼獲取詳細視頻演示&#xff1a;文章底部獲取博主聯系方式&#xff01;&#xff01;&#xff01;&#xff01;本系統開發思路進度安排及各階段主要任務java類核心代碼部分展示主要參考文獻&#xff1a;源碼獲取/詳細視頻演示 ##項目…

小魚fish系統 sudo apt update報錯(密鑰失效)

在使用小魚fish提供的系統鏡像文件&#xff0c;sudo apt update系統更新時遇到了以下報錯&#xff0c;即ROS 2 倉庫的 GPG 密鑰已過期&#xff0c;以及 Docker 倉庫使用了過時的密鑰存儲方式 fishrosfishros-linux:~$ sudo apt update 獲取:1 http://mirrors.tuna.tsinghua.ed…

深度優先搜索 (DFS) 詳解

1. 什么是深度優先搜索&#xff1f; 深度優先搜索&#xff08;Depth-First Search, DFS&#xff09;是一種用于遍歷或搜索樹或圖的算法。這個算法會盡可能深地搜索樹的分支。當節點v的所在邊都已被探尋過&#xff0c;搜索將回溯到發現節點v的那條邊的起始節點。這一過程一直進…

文心4.5開源大模型的使用和部署

前言 就在今天&#xff0c;文心4.5模型開源了&#xff0c;不是一個&#xff0c;而是整個系列模型正式開源。很突然&#xff0c;我都震驚了。文心4.5系列開源模型共10款&#xff0c;涵蓋了激活參數規模分別為47B 和3B 的混合專家&#xff08;MoE&#xff09;模型&#xff08;最…

HarmonyOs開發之——TypeScript介紹、入門,及 TypeScript、JavaScript、ArkTs的具體區別解讀。

HarmonyOs開發之——TypeScript介紹、入門&#xff0c;及 TypeScript、JavaScript、ArkTs的具體區別解讀。 一、 開發語言介紹&#xff1a; TypeScript是JavaScript的超集&#xff0c;ArkTS則是TypeScript的超集。ArkTs是 HarmonyOs的主力開發語言&#xff0c;它在TypeScript…