2013-08-12 24 views

cevap

44

size çünkü o çeki eşittir gerçekleştirmek için gerek olmazdı: Örneğin

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

için

Yukarıdaki iletişim kullanmak yerine varsayılan değer olup olmadığını kontrol etmek alternatif yol var sorgu, yalnızca contantName öğesinin Stackoverflow olduğu nesneleri döndürür. Eğer FirstOrDefault kullandığınızda

if(contact == null) 
    do something 

yapabilirsiniz böylece hiçbir nesne Bunu varsayılan değer boş olurdu yüzden İletişim bir sınıftır eğer bir başvuru türü olduğunu biliyorum bulundu eğer null döndürür. Bununla birlikte, default kullanarak herhangi bir nesnenin (referans veya değer) varsayılan türünü kontrol edebilirsiniz.

yorum belirtildiği gibi
if(contact == default(Contact)) 
    do something 

, muhtemelen bir yüklemi alır FirstOrDefault aşırı yüklenmesini kullanarak kod daha verimli hale getirebilir. Ayrıca varsayılan değeri değiştirebilirsiniz

FirstOrDefault(m => m.contactName == "Stackoverflow") 

Programınız null veya 0 bir başka şey ile çalışmak gerekiyorsa döndü. Başka bir amacı, (yerine dönen null) bulunmuştur, örneğin

Contact defaultContact = new Contact(); 
defaultContact.ContactName = "StackExchange"; 

Contact contact = dbo.contact.Where(m=>m.contactName == "Stackoverflow") 
          .DefaultIfEmpty(defaultContact).First(); 

için yukarıda defaultContact nesne döndürür. Bunu yaparsanız, null veya default(T) için kontrol etmeniz gerekmez, çünkü bir Contact nesnesinin olduğunu biliyorsunuzdur. Referans türleri için null ve değer türleri için default döndürülür.

+1

bir not daha - bu 'FirstOrDefault kullanmak daha iyidir (m => m.contactName == "StackOverflow'daki")' –

+1

1, cevap eklendi :) – keyboardP

+1

Bu, yalnızca 'contact' referans türü, 'default()' kullanarak daha iyi ise çalışır. –

7

FirstOrDefault. Böylece testiniz geçersiz. değer varsayılan wheteher kontrol etmek orther olarak, default (Type) ile karşılaştırmak gerekir: Yukarıdaki kod struct Contact veya class Contact biriyle çalışacak

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

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

. Ayrıca, default (Contact)'un hiçbir zaman sorgumuzun geçerli bir dönüş değeri olmadığını varsayıyoruz.

+0

Bazı örnek kodlar vermelisiniz, bu en iyi çek olurdu. –

1

Sen()

Contact contact = dbo.contact.where(m=>m.contactName!="" &&m.contactName!=null && m.contactName == "Stackoverflow").FirstOrDefault(); 
2

FirstOrDefault kullanmak bu tür ardından "Varsayılan" değerini bulmadığı takdirde, birinci elemanın açılımı olabilir. Varsayılan değeri döndürmek için dahili olarak default anahtar sözcüğünü kullanır.

kullanımı: ör için return default(Contact) or default(int)

Eğer bir değer türü ise int diyelim. O zaman 0'a dönecektir. Referans türlerinde "Null" vb. dönecektir.

Bu size mantıklı gelsin.

1

Genel olarak, FirstOrDefault koleksiyon türü için default değeri istediğiniz öğeyi döndürür. o int durumunda, null var referansların durumunda - 0 vb

İlgili konular