【问题标题】:Docuementation for how the == operator resolves types when comparing value types比较值类型时 == 运算符如何解析类型的文档
【发布时间】:2020-11-20 20:09:16
【问题描述】:

我想知道是否有人可以向我指出== 运算符如何解析隐式转换的官方文档。

我有这个结构:

public readonly struct Name
{
    private readonly string _value;

    public Name(string name)
    {
        if (name == null)
            throw new ArgumentNullException(nameof(name));
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException("Invalid name.");

        _value = name;
    }

    public static implicit operator string(Name name) => name._value;

    public override string ToString()
    {
        return _value;
    }
}

然后我运行以下代码:

var a = new Name("a");
var b = new Name("a");

var eq = a == b;

因为我已经在结构上定义了隐式转换运算符到字符串,所以这个相等性检查返回true

它以某种方式解决了Name 可以转换为string,并使用string 比较,因为== 不适用于用户定义的结构,除非专门重载它。

我已尝试查找有关 == 运算符如何解析可以比较的类型的文档,但有人可以指出正确的方向吗?

【问题讨论】:

  • 我认为== 可以比较任何东西,只要它来自同一类型。如果其中一个不是同一类型,则需要先进行转换。
  • @Steven 但它以某种方式解决了Name 可以转换为string,并使用string 比较,因为== 不适用于用户定义的结构而无需专门重载它.
  • Binary operator overload resolution 开始,但预计必须从那里跟随链接,并注意不会有一个页面专门谈论 == 和隐式转换。您必须阅读并理解这些内容,然后遵循它们所描述的含义
  • 我不知道你为什么被骗了,这似乎是一个真正有趣的问题。当我设置相同的情况但使用自定义类 S(实现 operator ==)而不是 string 时,它不会使用它!

标签: c#


【解决方案1】:

【讨论】:

    猜你喜欢
    • 2011-02-03
    • 2022-12-09
    • 1970-01-01
    • 2021-11-07
    • 2012-02-22
    • 2018-11-29
    • 2010-12-16
    • 1970-01-01
    相关资源
    最近更新 更多