Char.Equals 与 Object.Equals——ReSharper 建议我应该使用 Object.Equals。我应该吗?

发布于 2024-12-23 07:49:41 字数 494 浏览 0 评论 0原文

基本上,我想知道在这种情况下我是否应该听 ReSharper...

您会发现与字符相比应该使用 Char.Equals(char) 因为它可以避免拆箱,但 Resharper 建议使用 Object.Equals(obj) 。也许我在这里遗漏了一些东西?


private const DEFAULT_CHAR = '#';

// DependencyProperty backing
public Char SpecialChar
{
    get { return (Char)GetValue(SpecialCharProperty); }
}

// ReSharper - Access to a static member of a type via a derived type.
if (Char.Equals(control.SpecialChar, DEFAULT_CHAR)) { ... }

我猜这是因为有 DependencyProperty 支持?

Basically, I'm wondering if I should listen to ReSharper in this instance...

You'd figure that comparing to characters one should use Char.Equals(char) since it avoids unboxing, but Resharper suggests using Object.Equals(obj). Maybe I'm missing something here?


private const DEFAULT_CHAR = '#';

// DependencyProperty backing
public Char SpecialChar
{
    get { return (Char)GetValue(SpecialCharProperty); }
}

// ReSharper - Access to a static member of a type via a derived type.
if (Char.Equals(control.SpecialChar, DEFAULT_CHAR)) { ... }

I'm guessing it's because there is a DependencyProperty backing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

老娘不死你永远是小三 2024-12-30 07:49:41

不可能覆盖 static 成员 - Object.Equals() 是静态成员,并且 Char 不能 覆盖它,即使您可以在 Char 类型上调用它(参数仍然是Object类型)

调用都没有区别

Object.Equals(object yourChar, object anotherChar) 

因此,无论您调用还是

Char.Equals(object yourChar, object anotherChar)

,因为装箱将发生在无论哪种情况。

为了避免这种情况,请使用实例方法,该方法在 Char被重写

if (yourChar.Equals(anotherChar)) doSomething();

It is impossible to override static members - Object.Equals() is a static member, and Char cannot override it, even though you can call it on the Char type (the params are still of type Object)

Therefore, it makes no difference whether you call

Object.Equals(object yourChar, object anotherChar) 

or

Char.Equals(object yourChar, object anotherChar)

since boxing will occur in either case.

To avoid this, use the instance method, which is overridden in Char:

if (yourChar.Equals(anotherChar)) doSomething();
风为裳 2024-12-30 07:49:41

Char.Equals(control.SpecialChar, DEFAULT_CHAR) 是对 Object.Equals(object, object) 的调用,因此 resharper 在这里是正确的。

我建议使用
control.SpecialChar.Equals(DEFAULT_CHAR)
或者只是
DEFAULT_CHAR == control.SpecialChar

Char.Equals(control.SpecialChar, DEFAULT_CHAR) is a call to Object.Equals(object, object), so resharper is correct here.

I would suggest to use
control.SpecialChar.Equals(DEFAULT_CHAR)
or just
DEFAULT_CHAR == control.SpecialChar

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文