は何か違いはありますか?「fooがnullである」と「FOO == null」の違いは何ですか
答えて
MSDNドキュメントから:
Is operator チェックオブジェクトは、指定されたタイプと互換性がある、または(C位で始まる7)パターンに対する式をテストしている場合。 isキーワードは、実行時に型の互換性を評価します。オブジェクトインスタンスまたは式の結果を指定した型に変換できるかどうかを判断します。事前定義された値型について
== is そのオペランドの値がそうでない場合、同じ偽である場合には、等価演算子(==)がtrueを返します。 string以外の参照型の場合、==は、2つのオペランドが同じオブジェクトを参照する場合にtrueを返します。文字列型の場合、==は文字列の値を比較します。
要約:いいえ、この例ではありません。 is
は通常、type
をチェックする場合に使用します。この場合はnullです。値を確認する場合は==
を入力してください。この場合もnullなので、両方ともtrueと評価されます。
そのドキュメントは混乱しています。'=='はオーバーロードされる可能性があります。したがって、ユーザ定義型の場合、必要なものを返すことができます。 – svick
ショートバージョン:よく動作するタイプの場合、foo is null
とfoo == null
の間に違いはありません。
ロングバージョン:あなたはfoo == null
を書き、operator ==
の適切な過負荷が存在するとき、それはいわゆる
です。それ以外の場合は、参照型に参照等価が使用され、値型に値等価が使用されます。
参照タイプにfoo is null
と書くと、これはobject.Equals(null, foo)
と書かれたようにコンパイルされます(切り替えられた注文に気付くと違いがあります)。実際には、これはfoo
とnull
の間の参照平等の比較を実行します。値の型の場合、foo is null
はコンパイルされません。
これは、あなたがfoo
のいくつかのインスタンスがnull
に等しいと言うクラスwoth operator ==
を書く場合は、foo == null
がfoo is null
とは異なる結果を与えることを意味します。
using System;
public class Foo
{
public static void Main()
{
var foo = new Foo();
Console.WriteLine(foo == null);
Console.WriteLine(foo is null);
}
public static bool operator ==(Foo foo1, Foo foo2) => true;
// operator != has to exist to appease the compiler
public static bool operator !=(Foo foo1, Foo foo2) => false;
}
このコード出力:これを示す
例
True
False
あなたがoperator ==
をオーバーロードするとき、あなたはそれが他のものの間で、あなたを意味し、合理的な方法で動作させる必要があります0123,foo
の場合foo == null
がtrue
であるとは限りません。この副作用として、通常の状況では、foo == null
とfoo is null
は同じ値を持ちます。
- 1. エクスプレスルートの `/:foo *`と `/:foo(。*)`の違いは何ですか? Expressで
- 2. Clojureのfoo、:: foo、:: bar/foo、および:bar/fooの違いは何ですか?
- 3. Foo * fooの違い。とフーfoo; C++で
- 4. params [:foo]と@fooの違いは何ですか?
- 5. 'foo'が参照変数である場合、[&foo] {...}キャプチャと[foo] {...}キャプチャの間に違いはありますか?
- 6. foo(int * arr)とfoo(int arr [])の違いはありますか?
- 7. PHP:{$ foo}と$ {foo}の違いはありますか
- 8. `foo == null`が` foo`が本当にnullのときには、どんな状況でもfalseである可能性がありますか?
- 9. クラスfoo、クラスfoo()とクラスfoo(オブジェクト)の違いは?
- 10. "if(foo)bar();"の違いと "foo && bar();"
- 11. if(x){foo();の違い}とx? foo():0;
- 12. 絶対( "/ foo")と相対( "../foo")のファイル名。 「foo」カテゴリとは何ですか?
- 13. `foo asは? Foo`はkotlinの `foo as Foo`と完全に等価ですか?
- 14. なぜtypeof(Foo)はnullを返すのですか?
- 15. Foo :: class.javaとFoo :: javaClassの違いは何ですか?私のロガーを初期化するために
- 16. コード "foo :: foo :: foo :: foob"がコンパイルされているのはなぜですか?
- 17. AS3のFooとは何ですか?
- 18. if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar)) `または` if(!isset($ foo)OR $ foo == $ bar) `が良いですか?
- 19. 角度4の[(ngModel)] = "foo"と#fooの違いは?
- 20. JavaScript:Reflect.get()とobj ['foo']の違い
- 21. @synthesize foo = _fooとは何ですか?
- 22. Scalaのa.ne(null)と!= nullの違いは何ですか?
- 23. map <string、pair <string、foo * >>とmap <string、pair <string、foo&>>の違いは何ですか?
- 24. コマンドは何ですか:var a、foo = "foo";平均?
- 25. DEFAULT NULLとCHECKBOX NULL mysqlの違いは何ですか?
- 26. != nullと!== nullの違いは何ですか?
- 27. `foo = require" foo "` foo "require" foo "`
- 28. ruby on railsでfoo [:product] = "abc"とfoo ["product"] = "abc"の間に違いはありますか?
- 29. foo []はPHPの$ this-> foo []で何を意味します
- 30. テンプレートクラスFooメソッドの引数は "Foo&"で、 "Foo <T>&"は同じですか?
C#7でしかリファレンスがnullであるかどうかを知ることができたとお考えですか? –
@DavidArnoあなたは正しいです、私は質問を改善したので、今は明らかです。 – MaciejLisCK