2

WinMD形式で出力されるC#Metro DLLを作成する際に、パブリッククラスがありIdます。をオーバーライドしますがEquals、オーバーロードすることはできません==

ただし、これと同じクラスがDLLの内部で使用されており、必然的にLINQを使用して、.Where(x => x.Id == Ids.House)明らかに機能しない書き込みを行っています。

考えられる解決策の1つは、を定義し、IdInternalそれをオーバーライド==して、を内部でラップできるようにすること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 に答える