Sıra eşleşen bir öğe içeriyor
Veri işleme için seri kullanıyorum ASP.NET bir uygulama var. Çalışırken, istisna olsun "Sıra eşleşen hiçbir öğe içeriyor".
if (_lstAcl.Documents.Count > 0)
{
for (i = 0; i <= _lstAcl.Documents.Count - 1; i )
{
string id = _lstAcl.Documents[i].ID.ToString();
var documentRow = _dsACL.Documents.First(o => o.ID == id);
if (documentRow !=null)
{
_lstAcl.Documents[i].Read = documentRow.Read;
_lstAcl.Documents[i].ReadRule = documentRow.ReadRule;
_lstAcl.Documents[i].Create= documentRow.Create;
_lstAcl.Documents[i].CreateRule = documentRow.CreateRule;
_lstAcl.Documents[i].Update = documentRow.Update;
_lstAcl.Documents[i].UpdateRule = documentRow.UpdateRule;
_lstAcl.Documents[i].Delete = documentRow.Delete;
_lstAcl.Documents[i].DeleteRule = documentRow.DeleteRule;
}
}
}
CEVAP
Bu özel durum üretiliyor bu replik beklerdim:
var documentRow = _dsACL.Documents.First(o => o.ID == id)
First()
eğer eşleşen tüm öğeleri bulabilirsiniz, bir özel durum oluşturur. Vermiş olduğun test için boş hemen ardından geliyor gibi istediğiniz FirstOrDefault()
döndüren, varsayılan değeri öğe türü (null başvuru türleri) eğer eşleşen hiçbir öğe buldu
var documentRow = _dsACL.Documents.FirstOrDefault(o => o.ID == id)
Bazı durumlarda diğer seçenekleri düşünmeye Single()
tam olarak eşleşen bir unsur var sana inanıyorum (zaman) ve SingleOrDefault()
tam veya sıfır eşleşen öğeleri bir tane var sana inanıyorum (zaman). FirstOrDefault
Bu durumda en iyi seçenek olduğunu sanıyorum, ama değer diğerleri hakkında bilmek zaten.
Diğer yandan, aslında ilk olarak buraya katılması ile daha iyi olabilir gibi görünüyor. Ne olacağı umurunda değilditümmaçlar (daha ilk) kullanabilirsiniz:
var query = from target in _lstAcl.Documents
join source in _dsAcl.Document
where source.ID.ToString() equals target.ID
select new { source, target };
foreach (var pair in query)
{
target.Read = source.Read;
target.ReadRule = source.ReadRule;
// etc
}
Bu kadar basit bir iş değilvedaha verimli IMO.
Sana bileyapındöngü devam etmeye karar, bir çift önerim var:
if
dış kurtulmak. Eğer Saymak için döngü bloğu hiç yürütecek sıfırsa olarak ihtiyacın yokC daha deyimsel onlar özel üst sınırları döngüler için kullanılan -#:
for (i = 0; i < _lstAcl.Documents.Count; i )
Ortak taşıyıcının ortadan kaldırmak
var target = _lstAcl.Documents[i]; // Now use target for the rest of the loop body
Mümkünse
foreach
yerinefor
ile başlayın:foreach (var target in _lstAcl.Documents)
Sıra hiçbir öğe içeriyor?...
Seri sıra dispatch_async ve dispatch_s...
Nasıl bir sıra iki yığınları kullanara...
Nasıl Java joker bir dizeyle eşleşen d...
Hiç bir şey ile eşleşen bir Düzenli if...