FirstorDefault linq işlevi tarafından döndürülen nesnenin aslında varsayılan olup olmadığını nasıl kontrol edebilirim?linq Varsayılan değer için Firstordefault denetimi
if(!contact.contactName.equal("Stackoverflow"))
do something
FirstorDefault linq işlevi tarafından döndürülen nesnenin aslında varsayılan olup olmadığını nasıl kontrol edebilirim?linq Varsayılan değer için Firstordefault denetimi
if(!contact.contactName.equal("Stackoverflow"))
do something
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.
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.
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.
Bazı örnek kodlar vermelisiniz, bu en iyi çek olurdu. –
Sen()
Contact contact = dbo.contact.where(m=>m.contactName!="" &&m.contactName!=null && m.contactName == "Stackoverflow").FirstOrDefault();
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.
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
bir not daha - bu 'FirstOrDefault kullanmak daha iyidir (m => m.contactName == "StackOverflow'daki")' –
1, cevap eklendi :) – keyboardP
Bu, yalnızca 'contact' referans türü, 'default()' kullanarak daha iyi ise çalışır. –