4

メソッドを使用してデータベースにクエリを実行して.FirstOrDefaultいる場合、与えられた結果をどのように処理すればよいですか? 特にnull値が気になります。現在、次のようなものがあります。

if (result == default(TypeOfResult))
{
    handleIt();
}

しかし、この「デフォルト」が何であるか正確にはわかりません。

if (result == null)
{
    handleIt();
}

どちらが機能しますか?そして、この「デフォルト」とは正確には何ですか?

4

4 に答える 4

8

FirstOrDefaultシーケンスの最初の要素、または文字通り問題の型のデフォルト値を返します。

そのため、何を照会しているかによって、デフォルト値が変わる場合があります。たとえば、 のコレクションのintdefaultは 0 になります。そのため、チェックするかどうかnullは機能しません。

検討:

List<int> s = new List<int>();
var x = s.FirstOrDefault();

ここでx等しい0

参照型はどうですか?

List<MyCustomClass> s = new List<MyCustomClass>();
var x = s.FirstOrDefault();

ここxにあるでしょうnull

これはおそらく、次の 2 つのアプローチのほうが優れています。

if (result == default(TypeOfResult))
{
   handleIt();
}
于 2012-08-23T16:01:37.003 に答える
6

TypeOfResultが参照型の場合

result == default(TypeOfResult)result == null 同じ意味です

の参照型のデフォルト値がnull.

default キーワードは、指定された型の「デフォルト値」を返すだけnullです。. 値の型の場合、型によって異なります (例: 0intなど)。

名前が示すようFirstOrDefaultに、コレクションの最初の要素、またはコレクションが空の場合は指定された型の既定値を返します。

于 2012-08-23T16:01:01.110 に答える
1

必要に応じて、コードが default(T) で failsave を実行できることを確認します。ここで、T は値の型であり、アイテムを Nullable オブジェクトにボックス化できます。

例えば:

var ints = new List<int>(){1,2,3,4,6};
int result = ints.Where(i => i == 0).FirstOrDefault();

リストに 0 がなくても、結果は 0 です。

var ints = new List<int>(){1,2,3,4,6};
var nullable = ints.Select(i => new Nullable<int>(i));
var result = nullable.Where(i => i == 0).FirstOrDefault()

結果は null です。リストに 0 はありません!

これはもちろん遅く、より多くのメモリを必要としますが、非値型でも機能します。

于 2012-08-24T10:28:15.377 に答える
0

Null で確認する必要があります。結果が見つからない場合、FirstOrDefault は NULL を返します。

この投稿を見る

于 2012-08-23T16:01:26.263 に答える