.net 隐式自定义类型转换运算符 static implicit operator

今天写代码的时候遇到了入场语法:

复制代码
public static implicit operator T1(T2 t) 
{ 
        return new T1{ T1.Name = t.Name } 
}

看着不是一个方法,也不是一个构造函数,作为工作多年的.net程序员竟然没见过这种修饰符,后面才知道这是 隐式的自定义类型转换运算符

T1作为目标类型

T2作为源类型

用 static implicit operator 修饰符 可以直接将T2隐式转换为T1

下面用一个例子来简单说明一下:

创建一个学生类和一个用户类:Student.cs User.cs

cs 复制代码
public class Student
    {
        public string StudentId { get; set; }
        public string StudentName { get; set; }

        public string ClassName { get; set; }
        
    }


    public class User
    {
        public string UserId { get; set; }

        public string UserName { get; set; }

        public string Password { get; set; }
       
    }

接着就是重点,在学生类添加隐式转换:

cs 复制代码
        public static implicit operator Student(User user)
        {
            return new Student
            {
                StudentId = user.UserId,
                StudentName = user.UserName,
                ClassName = "一年级"
            };
        }

写一个测试的类:

cs 复制代码
        public Student GetStudent()
        {
            var user = new User();
            user.UserName = "小王";
            user.UserId = "001";
            user.Password = "123";
            return user;
        }

可以看到接口希望返回一个学生对象,方法里面却返回了一个User对象,神奇的是也没有报错,运行看一下:

调用后成功返回了一个学生对象,是不是很神奇!

我觉得用这种隐式类型转换可以实现实体到DTO的映射,就是不知道这么写运行效率如何,感兴趣的可以研究一下。

相关推荐
懒人Ethan9 小时前
解决一个C# 在Framework 4.5反序列化的问题
java·前端·c#
mysolisoft11 小时前
Avalonia+ReactiveUI实现记录自动更新
c#·avalonia·reactiveui·sourcegenerator
心疼你的一切12 小时前
使用Unity引擎开发Rokid主机应用的模型交互操作
游戏·ui·unity·c#·游戏引擎·交互
韩立学长12 小时前
【开题答辩实录分享】以《C#大型超市商品上架调配管理系统的设计与实现》为例进行答辩实录分享
开发语言·c#
玩泥巴的14 小时前
.NET驾驭Word之力:数据驱动文档 - 邮件合并与自定义数据填充完全指南
c#·word·.net·com互操作
心疼你的一切18 小时前
使用Unity引擎开发Rokid主机应用的全面配置交互操作
学习·游戏·unity·c#·游戏引擎·交互
椒颜皮皮虾྅1 天前
【DeploySharp 】基于DeploySharp 的深度学习模型部署测试平台:安装和使用流程
人工智能·深度学习·开源·c#·openvino
kalvin_y_liu1 天前
【MES架构师与C#高级工程师(设备控制方向)两大职业路径的技术】
开发语言·职场和发展·c#·mes
椒颜皮皮虾1 天前
基于DeploySharp 的深度学习模型部署测试平台:支持YOLO全系列模型
c#
李宥小哥2 天前
C#基础10-结构体和枚举
java·开发语言·c#