gpt4 book ai didi

c# - 隐式转换运算符和相等运算符

转载 作者:行者123 更新时间:2023-11-30 13:49:19 25 4
gpt4 key购买 nike

假设我有一个支持隐式转换为 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...

编译器用 == 做了什么运算符(operator)?是否将 companyCode 隐式转换为字符串并运行 System.String ==执行?是否使用 System.Object ==执行?或者编译器会提示我吗? (我现在没有编译器来检查这个)。

据我所知,我还有几个其他选择。

  • 实现 ==(String x) CompanyCode 上的运算符(operator)。
  • 实现 IEquatable<String> CompanyCode 上的界面。

这些选项中的任何一个(或两个)是否更可取?

最佳答案

Say I have a simple object which supports implicit casting to System.String

我会质疑这个设计决定。它提出运算符重载这个问题的事实表明您的同事会问同样的问题。我什至不知道答案(就编译器将做什么而言)。

我绝对不会建议实现 IEquatable<string> , 作为当时 x.Equals(y)不会与 y.Equals(x) 对称.您可以实现 == 的两个重载在你的类里面,双向......但它不会与 Equals 一致.

我建议只拥有一个名为 Value 的属性或 Code类型的字符串,那么你可以使用:

if (companyCode.Value == "MSFTUKCAMBS")

这意味着什么马上就会明白。

基本上,我认为适合隐式转换的情况非常少。

来自Design Guidelines for Class Library Developers

Do not provide a conversion operator if such conversion is not clearly expected by the end users.

这里有这么明确的期望吗?

关于c# - 隐式转换运算符和相等运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837160/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com