在 C# Windows 运行时组件中,如何警告开发人员不要将 == 与公共类一起使用



在编写输出为 WinMD 格式的 C# Metro DLL 时,我有一个公共类Id。虽然它覆盖了Equals,但不允许重载==

但是,在 DLL 内部使用相同的类,并且不可避免地使用 LINQ,我发现自己编写的.Where(x => x.Id == Ids.House)显然不起作用。

一种可能的解决方案是定义一个内部的IdInternal,可以覆盖==然后将其包装在Id中。

如果没有该解决方案(我怀疑它必须发生在几个类中),有没有办法通过编译/运行时错误警告开发人员他们不应该对此类使用 ==?

winmd 文件中不支持运算符重载。 编译器可能存在阻止它们阻止在 winmd 文件中使用运算符重载的 bug,但您不能依赖该行为。

我认为 InternalId 和 Id 可能是最好的方法。

我有一个想法。假设您的 ID 是 Int。

创建新的自定义类型,将显式转换为 Int 运算符,并使用 [Obsolete] 属性对其进行标记,并显示警告作为结果。

最新更新