如何使用隐式运算符方法获取“查找用法”?

Posted

技术标签:

【中文标题】如何使用隐式运算符方法获取“查找用法”?【英文标题】:How To Get "Find Usages" working with implicit operator methods? 【发布时间】:2012-05-22 01:42:17 【问题描述】:

我从不喜欢隐式运算符(更喜欢扩展方法),因为在代码中发生转换/转换时很难直观地看到。

想象一下,如果你有下面的例子:

public static implicit operator Deal(string dealAsXml)

    //convert the xml into Deal object

上述隐式运算符可帮助您将 Xml 格式的交易转换/转换为交易对象。

通常当你在一个方法上右击时,你可以在它上面使用“Find Usages”(或Alt+F7),这非常有用,隐式运算符有没有类似的东西?

我认为这是尽可能使用扩展方法的另一个原因。

【问题讨论】:

【参考方案1】:

也许像 Resharper 这样的东西可以做到,但我不确定。当我需要查找用法时,我会按照穷人的方式进行,并删除隐式运算符,重新编译并查找错误。

我想理论上编译器可能会错过一个案例,如果它可以使用不同的隐式运算符(或切换到方法的“对象”类型重载),但它往往适用于我的用法。我确信有更好的解决方案,但到目前为止它对我有用。

编辑:刚刚有一个想法并进行了测试。将隐式运算符标记为[Obsolete] 实际上会导致编译器警告,无论您在哪里使用它!我想这将捕获那些存在其他有效重载的极端情况,而您完全删除了隐式运算符会错过这些情况。

【讨论】:

Resharper 也没有找到隐式运算符的用法。 也做了同样的穷人的方式。 :) 如果您有巨大的解决方案,这将是相当令人生畏的 将隐式运算符标记为[Obsolete] 效果更好,因为它可以捕获其他重载情况。 这是一个很好的克里斯,这样你至少可以得到警告(不破坏构建)。如果其他人想出更好的主意,我会等待。 当然;我想知道是否有办法让它通过标准的Find Symbol Results 窗口检查/报告,如果只是为了保持工作流程的一致性而不必更改代码。尤其是在您查看 3rd 方库时,您无法自己完全添加过时的属性。

以上是关于如何使用隐式运算符方法获取“查找用法”?的主要内容,如果未能解决你的问题,请参考以下文章

如何强制编译器显示隐式构造函数

javascript教程隐式类型转换如何操作

使用 boost::variant C++ 的隐式运算符重载

如何获取不和谐 oauth2 隐式授权的范围值?

如何将我的类隐式转换为另一种类型?

如何使 C++ 类 gdb 友好?