【发布时间】:2012-03-23 09:58:55
【问题描述】:
假设我有一个支持隐式转换为 System.String 的简单对象
public sealed class CompanyCode
{
public CompanyCode(String value)
{
{ Regex validation on value format }
_value = value;
}
readonly String _value;
public override String ToString() => _value;
static public implicit operator String(CompanyCode code) =>
code?.ToString();
}
现在让我们在程序的另一部分中说我与一个字符串进行比较:
var companyCode = { some company code object }
if (companyCode == "MSFTUKCAMBS")
// do something...
编译器对== 运算符做了什么?是否将 companyCode 隐式转换为字符串并运行 System.String == 实现?是否使用System.Object == 实现?或者编译器会抱怨我吗? (我现在没有编译器来检查这个)。
据我所知,我还有其他几个选择。
- 在 CompanyCode 上实现
==(String x)运算符。 - 在 CompanyCode 上实现
IEquatable<String>接口。
这些选项中的任何一个(或两个)会更可取吗?
【问题讨论】:
标签: c# operator-overloading implicit-conversion