【C#】通用类型转换

这篇具有很好参考价值的文章主要介绍了【C#】通用类型转换。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据类型转换就是将数据(变量、数值、表达式的结果等)从一种类型转换为另一种类型。

自动类型转换(隐式类型转换)

自动类型转换就是编译器默默地、隐式地、偷偷地进行的数据类型转换,这种转换不需要程序员干预,会自动发生。

例如:

int i = 100;
double d = i; 

敲黑板:

  1. 转换前后的类型必须相兼容 例如:int和double
  2. 隐式数值转换实际上就是从低精度的数值类型到高精度的数值类型的转换,即小的类型转大的类型

强制类型转换(显式类型转换)

与自动转换正好相反,强制转换需要用户明确地指定转换的类型。显式转换包括所有的隐式转换,也就是说把任何系统允许的隐式转换写成显式转换的形式都是允许的
例如:

double d = 100.00;
int i = (int)d;

敲黑板:

  1. 显式转换可能会导致错误。进行这种转换时编译器将对转换进行溢出检测。如果有溢出说明转换失败,就表明源类型不是一个合法的目标类型。无法进行类型转换。
  2. 强制类型转换会造成数据精度丢失。

通过函数进行转换(通过方法进行类型转换)

函数转换,顾名思义通过编写类型处理方法的形式达到转换类型的目的。

int i;
string str = "100";
i = int.Parse(str);
int.TryParse(str, out i); // 推荐使用,对比 int.Parse(str) 多了异常处理增强了代码的健壮性
  • 常用类型转换方法
方法 说明
ToString C# 基类型是 Object 所以所有的类型都有 ToString()。转字符串类型
Convert.ToChar 转换为字符型(char)
Convert.ToString 转换为字符串型(string)
Convert.ToDateTime 转换为日期型(datetime)
Convert.ToDouble 转换为双精度浮点型(double)
Conert.ToSingle 转换为单精度浮点型(float)
Convert.ToBase64CharArray 将数组中的项进行 Base64 编码
Convert.ToBase64String 将字符串进行 Base64 编码
Convert.ToBoolean 转换为布尔类型(bool)
Convert.ToDecimal 转换为等效的十进制数
Convert.ToSByte 转换为 8 位带符号整数
Convert.ToInt32 转换为 32 位带符号整数
Convert.ToInt16 转换为 16 位带符号整数
Convert.ToInt64 转换为 64 位带符号整数
Convert.ToByte 转换为 8 位无符号整数
Convert.ToUInt16 转换为 16 位无符号整数
Convert.ToUInt32 转换为 32 位无符号整数
Convert.ToUInt64 转换为 64 位无符号整数

使用 as 操作符转换

使用 as 操作符具有 高效安全 的特点:
  as 操作符不会做过的转换操作,当需要转化对象的类型属于转换目标类型或者转换目标类型的派生类型时,那么此转换操作才能成功,而且并不产生新的对象当不成功的时候,会返回 null
  当用 as 操作符进行类型转换的时候,首先判断当前对象的类型,当类型满足要求后才进行转换,而传统的类型转换方式,是用当前对象直接去转换,而且为了保护转换成功,要手动加上try-catch,所以相对来说,as 效率高。

敲黑板:

  1. as 转换不成功会返回 null 因此在无法确定转换结果的情况下一定一定要进行判空。
  2. as 也有一定的限制:
    • 不用在类型之间进行类型转化
    • 不能应用在值类型数据 - 只支持引用类型

通用类型转换方法实现

通用类型转换方法本质还是方法进行类型转换的方式,确切来说是 Convert 的形式。
不同于现有的转换方法有固定的类型,通用型是通过 泛型 约束来定义目标转换类型。并且使用扩展方法的形式是的调用起来非常的容易,且可以进行链式编程。

public static class Extensions
{
    public static T Parse<T>(this object value, T defaultValue = default)
    {
        var type = typeof(T);
        try
        {
            var nullableType = Nullable.GetUnderlyingType(type);

            if (nullableType is null)
                return (T)Convert.ChangeType(value, type);

            return (T)Convert.ChangeType(value, nullableType);
        }
        catch
        {
            return defaultValue;
        }
    }
}

备注文章来源地址https://www.toymoban.com/news/detail-672879.html

  • 还可以通过继承接口 IConventible 或者 TypeConventer 类,从而实现自己的转换。

到了这里,关于【C#】通用类型转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#中的数据类型转换

    开发工具与关键技术: MVC 撰写时间:2021/8/18 下面我们来讲C#中数据类型的转换; 1.C#中的数据类型转换分为两种:隐式类型转换以及显式类型转换; (1)隐式类型转换:将存储范围小的数据类型直接转换为存储范围大的数据类型。 例如: 隐式转换大致分为以下几种: 隐式

    2023年04月08日
    浏览(54)
  • C#学习笔记--变量类型的转换

    转换原则 同类型的大的可以装小的,小类型的装大的就需要强制转换。 隐式转换: 同种类型的转换: 不同类型的转换: char类型可以隐式转换成数值型,根据对应的ASCII码来进行转换。 无符号的无法隐式存储有符号的,而有符号的可以存储无符号的。 显示转换 括号强转(注

    2024年02月08日
    浏览(47)
  • VM图像类型转换专题(C#)

    VisionMaster(后简称VM)作为一款功能强大的工业图形图像处理软件,可对工业中遇到的各种图像进行处理,同时还有功能强大的算子以及很全面的例程,作为图像处理的主程序是非常不错的。当前VM提供了VM算法平台、VM SDK开发、算子SDK开发和算子模块开发四种开发模式兼顾各

    2024年02月16日
    浏览(41)
  • C# NetTopologySuite+ProjNet 任意图形类型坐标转换

    添加引用:NetTopologySuite、ProjNet、ProjNet.SRID Program.cs文件: 新增文件:MathTransformFilter.cs,用于完成任意geometry的序列化转坐标。  

    2024年02月10日
    浏览(44)
  • C# 学习笔记2-控制流与类型转换

    关于变量的简单操作 判断 循环 类型转换 异常处理 检查数字类型的溢出 一元运算符 Unary operators x++ , ++x , x-- , --x 。 这些运算符同 C++。 postfix operator 后置运算符 还有 typeof(int) , sizeof(int) 。 二元运算符 Binary arithmetic operators 无非是: + 、 - 、 * 、 / 、 % modulus 模 remaind

    2024年02月02日
    浏览(40)
  • C# 把字符串(String)格式转换为DateTime类型方法

    Convert.ToDateTime(string)  注意:string格式有要求,必须是yyyy-MM-dd hh:mm:ss 方式二:DateTime.Parse(string) 参考:将字符串转换为 DateTime | Microsoft Learn DateTime.Tostring()//这个转换之后是YYYY/MM/DD HH:MM:SS DateTime.ToShortString()//这个转换之后是YYYY/MM/DD Convert.ToDateTime(string)//string是你要转换成时间

    2024年02月09日
    浏览(60)
  • unity的C#学习——标识符号、关键字与数据类型及其转换方式

    标识符是用来识别 类、变量、函数 或任何其它用户定义的 项目 。在 C# 中,类的命名必须遵循如下基本规则: 标识符必须以 字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。 标识符中的第一个字符不能是数字。 标识符必须不包含任何

    2024年02月01日
    浏览(47)
  • Rust之通用集合类型

    在Rust语言中包含了一系列被称为集合的数据结构。大部分的数据结构都代表着某个特定的值,但集合却可以包含多个值。与内置的数组与元组类型不同,这些集合将自己持有的数据存储在了堆上。这意味着数据的大小不需要在编译时确定,并且可以随着程序的运行按需扩大或

    2024年02月15日
    浏览(41)
  • 10-通用类型、特质和生命周期

    上一篇: 09-错误处理         每种编程语言都有有效处理概念重复的工具。在 Rust 中,泛型就是这样一种工具:具体类型或其他属性的抽象替身。我们可以表达泛型的行为或它们与其他泛型的关系,而不需要知道在编译和运行代码时它们的位置。         函数可以接

    2024年02月20日
    浏览(34)
  • 16 - Workbench分析类型与通用求解设置

    隐式分析、显式分析   静力分析 模态分析 反应谱分析 谐响应分析 特征值屈曲分析 瞬态分析    线性分析 非线性分析 材料非线性分析 几何非线性分析 接触非线性分析  荷载步、荷载子步、时间 Time、Nsubst、Deltim、Autots 有的载荷不是直接加在上面,而是各渐变的过程。 除

    2024年02月04日
    浏览(75)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包