2016-09-08 8 views
-1

私は結果がNULLであることを期待していますが、コードが実際に例外をスローこのは、C#のnullで条件演算子は、LINQメソッドと連携し

List<string> list = new List<string> { "str1", "str2", "str3"}; 

string searchkey = "str4"; // this does not exist in the list so will use elvis operator before picking the first from the resulting sequence. 

var result = list.where(s=>(s.Contains(searchkey)))?.First(); 

ような何かを達成するためにエルビス演算子を使用しようとしています。

+8

1.これは[Elvis Operator](https://en.wikipedia.org/wiki/Elvis_operator)ではありません。2. Whereは大文字にする必要があります。3. ['Where'は' null'を返すことはありません] (http://stackoverflow.com/questions/1191919/what-does-linq-return-when-the-results-are-empty) –

+2

_actual_コードとエラーメッセージは何ですか? –

+0

また、あなたの実際の要件は、リストにある場合はアイテムを返し、それ以外の場合はリストの最初のアイテムを返します。 –

答えて

0

Whereオペレータが列挙するものを返し、First()を評価できないためです。あなたは問題が

list.Where(s=>(s.Contains(searchkey))) 

nullを返さないことであるFirstOrDefault()

+3

"Where'演算子が' null'を返す[いいえ](http://stackoverflow.com/questions/1191919/what-does-linq-return-when-the-results-areempty)。 .. –

+0

いいえ、nullを返しませんが、反復する要素は返しません。私は編集します。ちなみに、ありがとうございました。 – hellowstone

2

を使用することができます。それは同じことではない空のシーケンスを返します。オブジェクトのシーケンスが空のときにnull取得したい場合

FirstOrDefaultを使用します。

var result = list.FirstOrDefault(s=>(s.Contains(searchkey))); 

注: "エルビス演算子" の C#のバージョンは||、ない?.です。コード内の演算子は、null条件演算子と呼ばれます。

+0

'||'論理的またはである。 '?'確かにエルヴィス運営者です –

関連する問題