如何进行有效的实例分享C操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计690个文字,预计阅读时间需要3分钟。
今天在Review一个老项目的时侯,看到一段奇特的代码。if (dto.Payment==null) continue; var entity=entries.FirstOrDefault(e=> e.LedgerEntryID==dto.LedgerEntryID); dto.Payment=entity.Payment; 其中,dto.Payment是一个字符串。
今天在Review一个老项目的时候,看到一段奇怪的代码。
if (dto.Payment == null) continue; var entity = entries.FirstOrDefault(e => e.LedgerEntryID == dto.LedgerEntryID); dto.Payment = entity?.Payment;
其中dto.Payment是一个PaymentDTO类的实例,entity?.Payment是一个Payment类的实例,PaymentDTO类和Payment类没有子父关系,所以不存在子类和父类之间的隐式转换。
奇怪的是Visual Studio的编译器没有提示任何编译错误。
打开PaymentDTO类的定义之后,发现了以下方法签名。
public static implicit operator PaymentDTO(Payment payment)
从方法签名上看,这就是重写PaymentDTO类型的操作符,但并不是我以前常用的+,-,*,/, ==等。
查询MSDN之后,才了解到implicit和explicit是一对转换操作符。
本文共计690个文字,预计阅读时间需要3分钟。
今天在Review一个老项目的时侯,看到一段奇特的代码。if (dto.Payment==null) continue; var entity=entries.FirstOrDefault(e=> e.LedgerEntryID==dto.LedgerEntryID); dto.Payment=entity.Payment; 其中,dto.Payment是一个字符串。
今天在Review一个老项目的时候,看到一段奇怪的代码。
if (dto.Payment == null) continue; var entity = entries.FirstOrDefault(e => e.LedgerEntryID == dto.LedgerEntryID); dto.Payment = entity?.Payment;
其中dto.Payment是一个PaymentDTO类的实例,entity?.Payment是一个Payment类的实例,PaymentDTO类和Payment类没有子父关系,所以不存在子类和父类之间的隐式转换。
奇怪的是Visual Studio的编译器没有提示任何编译错误。
打开PaymentDTO类的定义之后,发现了以下方法签名。
public static implicit operator PaymentDTO(Payment payment)
从方法签名上看,这就是重写PaymentDTO类型的操作符,但并不是我以前常用的+,-,*,/, ==等。
查询MSDN之后,才了解到implicit和explicit是一对转换操作符。

