ここで誰かがVB.NETを使用していて、(たとえば、または)IsNothing
とは対照的に、使用することに対して、またはそれに対して強い好みがありますか?もしそうなら、なぜですか?Is Nothing
If IsNothing(anObject)
If anObject Is Nothing...
編集:両方が同じように受け入れられると思う場合は、1つを選んでそれを使い続けるのが最善だと思いますか、それともそれらを混ぜても大丈夫ですか?
ここで誰かがVB.NETを使用していて、(たとえば、または)IsNothing
とは対照的に、使用することに対して、またはそれに対して強い好みがありますか?もしそうなら、なぜですか?Is Nothing
If IsNothing(anObject)
If anObject Is Nothing...
編集:両方が同じように受け入れられると思う場合は、1つを選んでそれを使い続けるのが最善だと思いますか、それともそれらを混ぜても大丈夫ですか?
回答:
Patrick Steeleが彼のブログでこの質問に最もよく答えたことがわかります:IsNothing()の回避
Patrick Steeleが彼の投稿の功績を認められるようにするため、ここでは彼の回答はコピーしていません。しかし、Is NothingとIsNothingのどちらを使用するかを決定しようとしている場合は、彼の投稿を読む必要があると思います。Is Nothingが最良の選択であることに同意するでしょう。
編集-ここでVoteCoffeのコメント
記事の内容の一部:さらにコードを確認したところ、これを回避する必要がある別の理由がわかりました:値型を受け入れます!明らかに、IsNothing()は「オブジェクト」を受け入れる関数であるため、必要なものは何でも渡すことができます。値型の場合、.NETはそれをオブジェクトにボックス化し、IsNothingに渡します。ボックス化された値では常にfalseが返されます。VB.NETコンパイラは「Is Nothing」スタイルの構文をチェックし、値の型で「Is Nothing」を実行しようとするとコンパイルされません。しかし、IsNothing()関数は問題なくコンパイルされます。-PSteele –投票コーヒー
IsNothing()
ここにある4つの理由の記事からIsNothing()VSです何も
最も重要なのは、IsNothing(object)
すべてがオブジェクトとして、値型も含めてオブジェクトとして渡されることです。値の型をにすることはできないためNothing
、完全に無駄なチェックになります。
次の例を見てください。
Dim i As Integer
If IsNothing(i) Then
' Do something
End If
これはコンパイルして正常に実行されますが、これは:
Dim i As Integer
If i Is Nothing Then
' Do something
End If
コンパイルされませんが、代わりにコンパイラがエラーを発生させます:
「is」演算子は、タイプ「整数」のオペランドを受け入れません。
オペランドは参照型またはnull許容型である必要があります。
IsNothing(object)
は実際にはの一部ですMicrosoft.VisualBasic.dll
。
VisualBasicライブラリへの不要な依存関係があるため、これは望ましくありません。
その遅い-実際には33.76%遅い(1000000000回以上の反復)!
おそらく個人的な好みですがIsNothing()
、ヨーダの状態のように読みます。変数を見るときは、その状態をチェックし、調査の対象にします。
つまりはありません、それは Xを行いますか?--- しないですx
のプロパティINGのそれを?
だから私はIf a IsNot Nothing
より読みやすいと思いますIf Not IsNothing(a)
VBは、「英語のように」、そして()や{}をよく使用する言語に慣れている人々にとって快適なものにするためのものです。たとえば、 "like english"側では、VBには " Ai n't "キーワードがあります...いいえ、冗談ではありません。そしてもう一方の面では、おそらくほとんどの場合すでに知っているので、必要に応じて()を関数呼び出しで使用できますが、そうする必要はありません。
私はIsNothing()を好みますが、私はCとC#を使用しているので、それが快適です。そして、私はそれがより読みやすいと思います。しかし、あなたにとってより快適に感じられるものなら何でもいい。
主にそれがよりオブジェクト指向に見えるため、私は「Is Nothing」の代替案に傾いています。
確かにVisual Basic は Ai n'tキーワードを持っていません。
また、SQLと同じように、Is Nothingバージョンを部分的に使用する傾向があります。
Is Nothingには、値Nothingに割り当てられたオブジェクトが必要です。IsNothing()は、数値型など、初期化されていない変数を使用できます。これは、たとえば、オプションのパラメーターが渡されたかどうかをテストする場合に役立ちます。
Nothing
Is Nothing
IsNothing()