2011-01-29 8 views
3

可能性の重複:
Lambda Expression: == vs. .Equals()LINQで等号キーワードを使用して

こんにちは、

私はキーワードは、変数や他のものを比較するために、Equalsをたくさん使います。

しかし

wines = wines.Where(d => d.Region.Equals(paramRegion)).ToList(); 

実行時のリターンエラーをデータ領域に、私はエラーを取り除くために、コード

wines = wines.Where(d => d.Region == paramRegion).ToList(); 

を使用していた

NULLであるとき。

これはなぜエラーが発生しますか?

ありがとうございました。

+1

は 'このコンテキストでEquals'はキーワードではありません - それはちょうど方法です。 ** ** LINQ文脈の 'equals'キーワードはありますが、' join'を実行するときだけです。 –

+0

この質問は前に回答されています http://stackoverflow.com/questions/2273600/lambda-expression-vs-equals – Victor

答えて

3

nullオブジェクト参照でインスタンスメソッドを呼び出すことはできません。 Regionメソッドがインスタンスメソッドを呼び出す前にnullでないことを確認する必要があります。

wines = wines.Where(d => d.Region != null && d.Region.Equals(paramRegion)).ToList(); 

d.Region == paramRegionは(ほとんど)object.Equals(d.Region, paramRegion)に展開され、その静的メソッドは、パラメータがnullかequals()メソッドを呼び出す前にあるかどうかをチェックしません。

paramRegionをnullにすることができないことがわかっている場合は、別の順序で条件を記述することもできます。その後、

d.Region == null 

任意のメソッド呼び出した場合

Debug.Assert(paramRegion != null); 
wines = wines.Where(d => paramRegion.Equals(d.Region)).ToList(); 
+0

ワイン= wines.Where(D =>はObject.equals(d.Region、paramRegion ))。ToList();)。 – Doug

3

は基本的に、ここでは、それが初期化されていないので、その上ののEquals(...)は、例外が発生しますです。

0

使用すると、使用することができます。

paramRegion.Equals(d.Region) 
関連する問題