SORU
23 Kasım 2011, ÇARŞAMBA


İşleme IEnumerable Olası birden çok numaralandırma için Uyarı

IEnumerable<> bir kullanım için gereken Şifremi birkaç kez böylece Resharper hata alıyorum "IEnumerable Olası birden çok numaralandırma".

Örnek kod:

public List<object> Foo(IEnumerable<object> objects)
{
    if (objects == null || !objects.Any())
        throw new ArgumentException();

    var firstObject = objects.First();
    var list = DoSomeThing(firstObject);        
    var secondList = DoSomeThingElse(objects);
    list.AddRange(secondList);

    return list;
}
  • objects parametre List ve daha sonra mümkün olan birden çok numaralandırma önlemek için değiştirebilirim ama sonra üstesinden gelebileceğim en yüksek nesne anlamıyorum.
  • Yapabileceğim başka bir şey yönteminin başında List IEnumerable dönüştürmek için:

 public List<object> Foo(IEnumerable<object> objects)
 {
    var objectList = objects.ToList();
    // ...
 }

Ama bu öyle değilgarip.

Bu senaryoda ne yapardınız?

CEVAP
23 Kasım 2011, ÇARŞAMBA


Parametre olarak IEnumerable alma sorunu arayanların olduğunu "bu numaralandır keşke". Sıralamak istediğiniz nasıl onlara değil.

Nesneleri Listelemek ve daha sonra mümkün olan birden çok numaralandırma önlemek için parametre değiştirebilirim ama o zaman anlamıyorumüstesinden gelebileceğim en yüksek nesne.

En yüksek nesne alma amacı asil, ama çok fazla varsayımlar için oda bırakır. Gerçekten biri seni iki kere numaralandırma yöntemi, sadece bu (potansiyel olarak farklı sonuçlar her zaman alıyorum?) için SQL sorgu için bir SERİ geçmek ister misiniz

Semantik burada eksik olan belki de zaman yöntemi ayrıntılarını okumak için almaz arayan, yalnız bir kez yineleme kabul edebilir ki - pahalı bir nesne geçerler. Yöntem imzanızı her iki şekilde göstermez.

Yöntem imzası*/*11 12*, *değiştirerek en azından beklentileriniz nedir bu çağrıyı daha net hale getirecek, ve pahalı hataları önlemek için.

Aksi halde, en geliştiriciler yöntemi bakarak sadece bir kez yineleme düşünecektir. Eğer IEnumerable alarak bu kadar önemli ise, yöntem başlangıcında .ToList() yapmayı düşünmelisiniz.

Çok yazık .NET Sayım Oluşturucu IEnumerable bir arayüz,/etc Kaldır olmadan yok. şüpheli olan yöntemler, bu sorunu çözmek istiyorsunuz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • metagamers

    metagamers

    13 Mayıs 2006
  • Michelle Phan

    Michelle Pha

    18 Temmuz 2006
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008