私のXmlシリアル化コードが機能しなかった理由を調べようと、過去数時間を費やしています。以下を考慮してください:オプションStrictとDefaultValueAttribute
<DefaultValueAttribute(False)>
Public Property UserName() As String
オプション厳密に設定されているかどうかにかかわらず、これはなぜ許可されますか?
私のXmlシリアル化コードが機能しなかった理由を調べようと、過去数時間を費やしています。以下を考慮してください:オプションStrictとDefaultValueAttribute
<DefaultValueAttribute(False)>
Public Property UserName() As String
オプション厳密に設定されているかどうかにかかわらず、これはなぜ許可されますか?
答えは、OptionStrictに関係なく、VSはVB.NETのデフォルト値をチェックしません。
<DefaultValueAttribute(False)>
は、実際には属性定義が型定義ではなく、DefaultValueAttribute
で、戻り値の型がboolean
であるため、有効です。さらに、DefaultValueAttribute
の.Value
プロパティはObject
タイプであるため、DefaultValueAttribute
の存在がOption Strict On
に違反するため、DefaultValue
属性の範囲では無視されるため、Option Strict
が無視されます。
かなり単純です。 DefaultValueAttribute
にはブール値を受け入れるオーバーロードがあるため、Option Strict
をオンまたはオフにしても動作します。
詳細については、このページを確認してくださいDefaultValueAttribute Class。