方法参数属性的用例是什么?

问题描述 投票:0回答:1

放入 Equals 和 hashcode 覆盖,我在创建方法时有 NotNullWhen 属性自动完成 - 阅读文档我的理解是,它基本上说,当 Equals 返回 true 时,传入的参数 obj 将不为空。为什么我想要拥有这个属性?它位于一个不能为 null 的结构中,并且重写不允许 null 参数返回 true。拥有这个属性真的很重要吗?它也没有强制执行这个逻辑,对吗?

public override bool Equals([NotNullWhen(true)] object? obj)
        {
            return (obj is Time time && Hour == time.Hour && Minute == time.Minute);
        }
c# parameters attributes
1个回答
1
投票

方法参数属性显然有多种用途。例如,它们可用于指示 Web 框架通过序列化 HTTP 请求的正文来填充参数。 Some 将指示编译器在未明确提供任何参数的情况下自动为可选参数提供值。

像您示例中的属性这样的属性旨在让您的方法的消费者的生活更轻松。例如,如果有人像这样使用你的类:

Time? providedTime = GetTimeFromInputs();
if(targetTime.Equals(providedTime))
{
    DoSomethingWith(providedTime.Hour, providedTime.Minute)
}

如果没有 Equals 方法上的属性,C# 编译器和分析器将非常有帮助地警告开发人员

providedTime.Hour
可能会引发空引用异常。开发人员可能直观地知道当
Equals
返回 true 时不可能发生这种情况,但 IDE 仍然给他们一个烦人的黄色小波浪线。有了该属性,编译器就知道足够的信息,不会向您发出错误的警告。

© www.soinside.com 2019 - 2024. All rights reserved.