42

FirstOrDefaultLINQ 関数によって返されたオブジェクトが実際に既定値であるかどうかを確認するにはどうすればよいでしょうか?

例えば:

Contact contact = dbo.contact
                     .Where(m => m.contactName == "Stackoverflow")
                     .FirstOrDefault();

以下を使用する代わりに、上記の連絡先がデフォルト値であるかどうかを確認する別の方法はありますか?

if (!contact.contactName.Equals("Stackoverflow"))
    // do something
4

5 に答える 5

10

FirstOrDefaultnull参照型と値型に対して返されdefaultます。したがって、あなたのテストは無効です。値がデフォルトかどうかを確認するには、次の値と比較する必要がありますdefault (Type)

Contact contact = dbo.contact.FirstOrDefault(m => m.contactName == "Stackoverflow");

if (!object.Equals(contact, default (Contact)))
    // Is not default

上記のコードは、 または のいずれstruct Contactかで機能しますclass Contactdefault (Contact)また、クエリの有効な戻り値ではないことも前提としています。

于 2013-08-12T10:01:02.650 に答える
4

FirstOrDefault() は最初の要素を表し、見つからない場合はそのタイプの「デフォルト」値を表します。内部的にdefaultキーワードを使用してデフォルト値を返します。

使用法:return default(Contact) or default(int)

たとえば、値型のint場合は 0 を返します。参照型の場合は " Null" などを返します。

于 2013-08-12T10:02:21.203 に答える
1

使用できます

Contact contact = dbo.contact.where(m=>m.contactName!="" &&m.contactName!=null && m.contactName == "Stackoverflow").FirstOrDefault();
于 2013-08-12T10:02:00.180 に答える
1

通常、コレクション タイプFirstOrDefaultの値を要求したアイテムを返します。default参照のnull場合は 、int の場合は -0などです。

于 2013-08-12T10:04:05.800 に答える