今天写代码的时候遇到了入场语法:
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的映射,就是不知道这么写运行效率如何,感兴趣的可以研究一下。