2

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

然而,同样的类在 DLL 内部使用,并且不可避免地使用 LINQ,我发现自己在编写.Where(x => x.Id == Ids.House)这显然行不通。

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

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

4

2 回答 2

2

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

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

于 2012-06-09T15:13:54.453 回答
0

我有个主意。假设你的 ID 是 Int。

创建一个新的自定义类型,将显式转换添加到 Int 运算符并使用 [Obsolete] 属性将其标记为结果并带有警告。

于 2012-06-09T10:11:50.773 回答