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…