2009-08-17 9 views
9

私はニックピッキングしています。しかし、ブール値だけを含む構造体(したがって2つの状態しか持たない)にIConvertibleインターフェイスを実装する場合、推奨値はIConvertible.GetTypeCode()から返されますか?この構造体は暗黙的に変換可能でブール値に匹敵し、文字列やXML表現以外のほとんどあらゆる面で、事実上ブール型です。IConvertible.GetTypeCodeを実装する

私がTypeCode.Booleanを返すとフレームワークに嘘をついているように感じますが、TypeCode.Objectは不必要に曖昧です。あなた自身の構造にこのメソッドを実装するための現実的な影響はありますか?

それが表すTypeCode.Booleanのための説明に基づいて

IConvertible.GetTypeCode on MSDN

答えて

3

これは可能ですが、注意してください。

多くのルーチンはGetTypeCodeを直接使用します。これは、構造体がそのうちの1つに渡された場合に影響を与える可能性があります。 GetTypeCodeをオーバーライドしてTypeCode.Booleanを返すと、これらのルーチンは構造体がboolであるとみなします。この構造体には奇妙な副作用があるかもしれません。

実際には、ほとんどのサンプル(VBのIsNumericルーチンなど)では数値型がチェックされるため、bool TypeCodeはこれに影響を与えませんが、効果がある可能性があります。いくつかのORMは、タイプの保存とロードを処理するためにタイプコードをチェックします。あなたの構造体が世界をバブルだと思うように欺くことを望むなら、それはあなたの型が実際にブール値ではないことをあまり明らかにしないかもしれませんが、微妙な問題を引き起こすかもしれません。

+2

ありがとうございました。私はReflectorもチェックしており、System.Variant.MarshalHelperConvertObjectToVariantなどの低レベルメソッドにアクセスしています。私は結論として、ブーリアンとして広告する理由はほとんどないと考えています。そのため、アクションの最良のコースはTypeCode.Objectを返すように見えます。 – Josh

+0

あなたがそうしないと強い理由がない限り、それは私がお勧めするものです。ブール値に設定すると意図しない結果になることがあります。 –

1

「真または偽のブール値を表す単純型を。」これは、あなたが構造体の記述に合っているように思えます。なぜなら、それはブール値だけを含み、それらの間で暗黙的に変換可能だからです。

関連する問題