广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现数组元素的数据类型转换方法详解
  • 930
分享到

C#实现数组元素的数据类型转换方法详解

2024-04-02 19:04:59 930人浏览 泡泡鱼
摘要

目录一、场景假设二、解决方案三、问题延伸四、数组类的静态转换方法五、刨根问底一、场景假设 假设有一串字符串如下所示,字符串中的数字之间已用英文状态下的逗号隔开。要求用此字符串中的数字

一、场景假设

假设有一串字符串如下所示,字符串中的数字之间已用英文状态下的逗号隔开。要求用此字符串中的数字快速生成int类型的数组,且尽可能使用最少的代码量。

string str = "1,2,3,4,5,6,7,8,9";

二、解决方案

我相信大多数同学在拿到这题的时候,一般都会给出以下的解决方案:

public int[] String2IntArray(string str)
{
    var strArr = str.Split(',');
    int[] numArr = new int[strArr.Length];
    for (int i = 0; i < strArr.Length; i++)
    {
        numArr[i] = Convert.ToInt32(strArr[i]);
    }
    return numArr;
}

上述代码确实能解决上述场景中的问题。

三、问题延伸

可是这时要求变了,改为生成char类型的数组。

这时一部分同学会说,既然让生成char类型数组,那我改下数据类型不就可以了嘛,于是给出如下代码:

public char[] String2CharArray(string str)
{
    var strArr = str.Split(',');
    char[] cArr = new char[strArr.Length];
    for (int i = 0; i < strArr.Length; i++)
    {
        cArr[i] = Convert.ToChar(strArr[i]);
    }
    return cArr;
}

另外一部分同学会说,每改一下输出的数据类型就要再写一个相应的方法,这样不通用不是很好。能不能用泛型解决此问题呢?想了一下,给出了以下代码:

public T[] String2Array<T>(string str)
{
    var tc = TypeDescriptor.GetConverter(typeof(T));
    var strArr = str.Split(',');
    T[] tArr = new T[strArr.Length];
    for (int i = 0; i < strArr.Length; i++)
    {
        tArr[i] = (T)tc.ConvertTo(strArr[i], typeof(T));
    }
    return tArr;
}

上面泛型代码解决方案可圈可点,可通用性感觉还是较差,代码量还是有点多。

如果这时要求数组对象实例直接进行转换呢?上面泛型代码解决方案又要进行优化改进。这时有没有更好的解决方案呢?答案是有的。

四、数组类的静态转换方法

数组(Array)类有一个静态方法ConvertAll,该方法能将一种类型的数组转换为另一种类型的数组。该方法能有效的解决上述问题的痛点。

我们来看一下这个方法是怎样定义的:

public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter)

  • 该方法没有重载方法,是类的静态方法,无需创建实例便可直接通过类名调用。
  • TInput:源数组元素的类型。
  • TOutput:目标数组元素的类型。

上述问题用ConvertAll方法该如何编码实现呢?下面给出代码示例:

var arr = str.Split(',');
var numArr = Array.ConvertAll<string, int>(arr, z => int.Parse(z));

 或者

var arr = str.Split(',');
var numArr = Array.ConvertAll<string, int>(arr, delegate (string s) { return int.Parse(s); });

 ConvertAll方法仅用两行代码,与前述的解决方法相比,结果一目了然、不言而喻。

五、刨根问底

那ConvertAll是如何实现数组元素的数据类型转换的呢?我们反编译一下该方法,得到如下代码:

public static TOutput[] ConvertAll<TInput, TOutput>(TInput[] array, Converter<TInput, TOutput> converter)
{
    if (array == null)
    {
        throw new ArgumentNullException("array");
    }
    
    if (converter == null)
    {
        throw new ArgumentNullException("converter");
    }
    
    TOutput[] array2 = new TOutput[array.Length];
    for (int i = 0; i < array.Length; i++)
    {
        array2[i] = converter(array[i]);
    }
    
    return array2;
}

 我们再看一下Converter是如何定义的:

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

知其然知其所以然,以后再遇到数组转换的问题我们就不用再怕了。

这时,有的同学可能会说:“在不知道Converter方法和其实现的提前下,我也是可能写出与Converter方法相同的实现代码的”。那不得不说你真的很棒,既然系统底层提供了该方法供我们使用,我们再编码一遍(提前是不知道Converter方法存在和其实现代码)岂不是有点多余?直接使用何乐而不为呢?

本篇文章我们经历了:提出问题->解决问题->延伸问题->刨根问底

这样的思考方式有助于我们快速提升编码能力,也希望这样的思考方式能给你们解决问题带来些许灵感。

到此这篇关于C#实现数组元素的数据类型转换方法详解的文章就介绍到这了,更多相关C#数组元素数据类型转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#实现数组元素的数据类型转换方法详解

本文链接: https://www.lsjlt.com/news/147565.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#实现数组元素的数据类型转换方法详解
    目录一、场景假设二、解决方案三、问题延伸四、数组类的静态转换方法五、刨根问底一、场景假设 假设有一串字符串如下所示,字符串中的数字之间已用英文状态下的逗号隔开。要求用此字符串中的数字...
    99+
    2022-11-13
  • C#怎么实现数组元素的数据类型转换
    这篇文章主要介绍“C#怎么实现数组元素的数据类型转换”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#怎么实现数组元素的数据类型转换”文章能帮助大家解决问题。一、场景假设假设有一串字符串如下所示,字...
    99+
    2023-06-30
  • Python数据类型转换实现方法
    目录基本类型转换python中的C语言数据类型python中的struct库python中的binascii库python中的libnum神器基本类型转换 python3与pytho...
    99+
    2022-12-08
    Python数据类型转换 Python类型转换
  • C语言实现数组元素排序方法详解
    目录前言算法总结及实现优化算法前言 在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排...
    99+
    2023-02-11
    C语言数组元素排序 C语言数组元素 C语言数组排序
  • c++数据类型转换的方法是什么
    在C++中,数据类型转换有以下几种方法:1. 隐式转换:在某些情况下,C++会自动执行数据类型的隐式转换。例如,将整数赋值给浮点数变...
    99+
    2023-09-16
    c++
  • JavaScript数据类型的转换详解
    目录数据类型的转换概述强制转换Number()String()Boolean()自动转换自动转换为布尔值自动转换为字符串自动转换为数值数据类型的转换 概述 JavaScript是一种...
    99+
    2022-12-22
    JavaScript数据类型转换 JavaScript数据类型 JS 数据类型转换
  • Spring中自定义数据类型转换的方法详解
    目录类型转换服务实现Converter接口实现ConverterFactory接口实现GenericConverter接口环境:Spring5.3.12.RELEASE。 Sprin...
    99+
    2022-11-13
  • java数据类型转换的方法
    这篇文章主要讲解了“java数据类型转换的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java数据类型转换的方法”吧!自动类型转换:主要指小类型到大类型的转换。 即强制类型转换:主要指...
    99+
    2023-06-19
  • python数据类型的转换方法
    这篇文章主要介绍“python数据类型的转换方法”,在日常操作中,相信很多人在python数据类型的转换方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python数据类型的转换方法”的疑惑有所帮助!接下来...
    99+
    2023-06-20
  • 详解Python中数据类型的转换
    目录一. 转换数据类型的作用二. 转换数据类型的函数三. 快速体验四. 实验总结一. 转换数据类型的作用 问:input()接收用户输入的数据都是字符串类型,如果用户输入1,想得到整...
    99+
    2023-03-15
    Python数据类型转换 Python数据类型
  • c++强制转换数据类型的方法有哪些
    在C++中,有以下几种强制转换数据类型的方法:1. 静态转换(static_cast):用于基本数据类型之间的转换,以及具有继承关系...
    99+
    2023-10-18
    c++
  • c语言数据类型转换的方法有哪些
    在C语言中,数据类型转换有以下几种方法:1. 隐式转换:当两个不同类型的数据进行运算或赋值时,编译器会自动进行隐式转换。2. 显式转...
    99+
    2023-10-10
    c语言
  • C/C++中数据类型转换详解及其作用介绍
    目录概述不同类型数据间的转换隐式类型转换强制类型转换自己声明的类型转换转换构造函数类型转换函数案例应用概述 在日常的开发中, 我们经常会用到数据类型转换, 所以我们要对数据类型转换有...
    99+
    2022-11-12
  • C++中常见的数据类型转换问题及解决方法
    C++ 中常见的数据类型转换问题及解决方法引言:在 C++ 编程中,经常会遇到不同数据类型之间的转换问题。正确地进行数据类型转换是保证程序正确性和性能的关键之一。本文将介绍一些常见的数据类型转换问题,并提供相应的解决方法和具体的代码示例。一...
    99+
    2023-10-22
    解决方法 数据类型转换 C++问题
  • Java数据类型转换的示例详解
    目录自动转换转换原理转换规则强制转换注意ASCII编码表Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。 自动转换 一个int 类...
    99+
    2022-11-13
  • mysql 数据类型转换的实现
    一、问题 有一张如下图所示的表,需要我们查出 result 值大于 reference_high值的数据 然后我们写了下面的SQL查询语句 SELECT i.result,i.reference_hig...
    99+
    2022-05-25
    mysql 数据类型转换 mysql 转换数据类型
  • 详解Go语言中的数据类型及类型转换
    目录1、基本数据类型2、基础数据类型转换3、基本数据类型转为字符串4、strconv的使用5、字符串转为基础类型1、基本数据类型 数据类型有很多,先研究一下基础的,例如:布尔型、数字...
    99+
    2022-11-13
  • 详解C语言中不同类型的数据转换规则
    不同类型数据间的混合运算与类型转换 1.自动类型转换 在C语言中,自动类型转换遵循以下规则: ①若参与运算量的类型不同,则先转换成同一类型,然后进行运算 ②转换按数据长度增加的方...
    99+
    2022-11-12
  • mysql decimal数据类型转换的实现
    最近在工作遇到数据库中存的数据类型是: decimal(14,4) 遇到的问题是: 当我使用python 读取到内存中时,总是带着 decimal字符, 再写入其它mysql表中时,数据类型为int型,导致数据入库...
    99+
    2022-05-24
    mysql decimal数据类型转换 MySQL数据类型DECIMAL
  • C++中图片类型的识别与转换详解方法
    目录1、图片类型的识别1.1、bmp图片1.2、jpg图片1.3、jpg图片1.4、gif图片1.5、tiff图片1.6、使用CreateFile和ReadFile API函数读取内...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作