私はいくつかのコードを持っていますが、私は削除したいという警告がたくさんあります。多くのものはProperty '<propertyname>' doesn't return a value on all code paths
の形式です。私はそれがなぜこれを言っているのか知っている、私はちょうどこれを修正する正しい0インパクトの方法を決定しようとしている。プロパティに明示的な戻り値がない場合、それは何を返していますか?
元のコードはこれです:
Public ReadOnly Property LevelName As String
Get
Dim LevelName As String
Return LevelName
End Get
End Property
:
Public ReadOnly Property LevelName() As String Implements IMember.LevelName
Get
End Get
End Property
私の最初の考えは、私はちょうどそこにReturn Nothing
文を置くことができるが、私は、私は反射でそれをデコンパイルならば、それは私にこれを与え気づくということでした
私はこのコードを(ローカル変数名を変更して衝突を回避するように変更した)コードに入れておくと、値が割り当てられる前に使用されていると不平を言います。
LinqPadでILを分析しようとすると(このテストが良いかどうかわからない)、空の方法はReflectorが私に与えた上記と同じですが、return Nothing
ととは異なります。
コードが100%同じであることを保証しながら、この警告を取り除くために使用できるのは何ですか?
編集:は、私はLinqPadは、さまざまな状況のために私を与えていることをILを含めるしようと思いました。
空GET:
IL_0000: ldloc.0
IL_0001: ret
明示的な空の文字列が返さ:
IL_0000: ldstr ""
IL_0005: ret
明示的な返品なし:
IL_0000: ldnull
IL_0001: ret
ldloc.0
はこちらではわかりません。私はそれがヌルになるレジスタから何かを取得しようとしているのだろうと思っているので、それはこの状況ではldnullと同じですが、私は今までILを実際に学んだことはありませんでした。...
実際は経験的に真実ではありません。このコードは、return文がなくてもコンパイルして正常に動作しますが、コンパイラの警告(エラーではありません)がスローされます。そして、上記の2つの提案は、空のゲッターと同じILにコンパイルされていないように見えます。なぜなら、私はこれら2つのうちの1つに変更を加えるのが少し緊張しているからです(私の本能は、 – Chris
returnステートメントのないゲッターまたは関数は、あまり意味がありません。 VBは非常に寛容で、return文を指定しなければ型のデフォルト値を返します。しかし、これは非常に悪いプログラミングスタイルであり、あなたの意図を表現していません。コードを読んでいる誰かが、コードが不完全であるかどうか、または 'Nothing'を返すことになっているかどうかはわかりません。したがって、コンパイラの警告。 'Return Nothing'を追加することを強くお勧めします! –
同じことをcompielsするコードを取得することは不可能な場合はいくつかのコードの特定のブロックについて私に警告しないようにコンパイラに指示することが可能ですので、私はちょうど "私はこれが間違っていることを知っているが、もう一度教えてくださいませんか "と似たようなものです... – Chris