SORU
3 Ocak 2012, Salı


neden IList veya Listeyi kullan?

Bu mesaj çok oldu biliyorum ama hala beni neden IList arayüzü gibi bir seferde ve bir dönüş IList arayüzü seviyorsanız beton listesi yerine geri karıştırır.

Bu mesajlar daha kolay uygulanmasını değiştirmek için yapar demek için çok geç okudum ama tam olarak nasıl çalıştığını anlamıyorum.

Eğer bu yöntem varsa söyle

  public class SomeClass
    {
        public bool IsChecked { get; set; }
    }

 public void LogAllChecked(IList<SomeClass> someClasses)
    {
        foreach (var s in someClasses)
        {
            if (s.IsChecked)
            {
                // log 
            }

        }
    }

IList kullanarak gelecekte bana yardımcı olacak nasıl emin değilim.

Eğer zaten bu yöntemi ben ne dersin? Hala IList kullanarak olmalıdır?

public void LogAllChecked(IList<SomeClass> someClasses)
    {
        //why not List<string> myStrings = new List<string>()
        IList<string> myStrings = new List<string>();

        foreach (var s in someClasses)
        {
            if (s.IsChecked)
            {
                myStrings.Add(s.IsChecked.ToString());
            }

        }
    }

Ben şimdi IList kullanarak ne alabilirim?

public IList<int> onlySomeInts(IList<int> myInts)
    {
        IList<int> store = new List<int>();
        foreach (var i in myInts)
        {
            if (i % 2 == 0)
            {
                store.Add(i);
            }
        }

        return store;
    }

peki ya şimdi? Değiştirmek için ihtiyacım olacak int listesini yeni bir uygulama var mı?

Yani temel olarak IList kullanarak her şeyin altında bir Liste ele bazı sorun çözülmüş olurdu nerede ya ben bazı gerçek kod örnekleri görmek istiyorum.

Benim okuyarak bir şeyler döngü olduğum yerine İEnumberable IList kullanılan olabileceğini düşünüyorum.

Edit Bu nasıl benim yöntemlerden bazıları ile oynuyor oldum. Hala dönüş yazarsanız daha somut bir arayüz yapayım diye () emin değilim

 public class CardFrmVm
    {
        public IList<TravelFeaturesVm> TravelFeaturesVm { get; set; }
        public IList<WarrantyFeaturesVm> WarrantyFeaturesVm { get; set; }

        public CardFrmVm()
        {
            WarrantyFeaturesVm = new List<WarrantyFeaturesVm>();
            TravelFeaturesVm = new List<TravelFeaturesVm>();
        }
}

 public class WarrantyFeaturesVm : AvailableFeatureVm
    {
    }

     public class TravelFeaturesVm : AvailableFeatureVm
    {

    }

      public class AvailableFeatureVm
    {
        public Guid FeatureId { get; set; }
        public bool HasFeature { get; set; }
        public string Name { get; set; }
    }


        private IList<AvailableFeature> FillAvailableFeatures(IEnumerable<AvailableFeatureVm> avaliableFeaturesVm)
        {
            List<AvailableFeature> availableFeatures = new List<AvailableFeature>();
            foreach (var f in avaliableFeaturesVm)
            {
                if (f.HasFeature)
                {
                                                    // nhibernate call to Load<>()
                    AvailableFeature availableFeature = featureService.LoadAvaliableFeatureById(f.FeatureId);
                    availableFeatures.Add(availableFeature);
                }
            }

            return availableFeatures;
        }

Hemen ardından böyle bir özelliği var ne benim etki alanı modeli için bu katacak basit gerçeği için IList iade ediyorum

public virtual IList<AvailableFeature> AvailableFeatures { get; set; }

yukarıdaki bu arabiriminin ile kullanmak için standart gibi görünüyor ne gibi bir IList kendisidir. Aksi takdirde, tekrar ama emin İEnumberable değil iade ettim galiba. Hala kullanıcı 100% (bir somut bir avantajı var nerede) gerek. çözemedim

2 düzenleyin

Ayrıca eğer yapmak istersem ne olur benim yöntemde referans geçer diye düşündüm.

private void FillAvailableFeatures(IEnumerable<AvailableFeatureVm> avaliableFeaturesVm, IList<AvailableFeature> toFill)
            {

                foreach (var f in avaliableFeaturesVm)
                {
                    if (f.HasFeature)
                    {
                                                        // nhibernate call to Load<>()
                        AvailableFeature availableFeature = featureService.LoadAvaliableFeatureById(f.FeatureId);
                        toFill.Add(availableFeature);
                    }
                }
            }

bu sorunları rastlıyorum? Uzatır onlar bir dizi(yani sabit bir boyuta sahiptir) beri? Somut bir Listesi için belki daha iyi olurdu, değil mi?

CEVAP
3 Ocak 2012, Salı


Orada üç tane soru burada: tip I resmi bir parametre için de kullanabilirsiniz. Ben yerel bir değişken için de kullanabilirsiniz. ve bir dönüş türü için de kullanabilirsiniz.

Resmi parametreleri:

Burada ilkeihtiyacınız olandan daha fazlasını istemeyin. IEnumerable<T> iletişim "başından sonuna kadar bu dizi öğeleri almak gerekiyor". IList<T> iletişim "ve rasgele sırada bu dizi öğeleri ayarlamak lazım". List<T> "alın ve rasgele bir sırada bu dizi öğeleri ayarlamak gerekiyor ve ben sadece listeleri kabul; diziler kabul etmiyorum." iletişim

İhtiyacınız olandan daha fazlasını talep ederek, (1) arayan gereksiz gereksiz iş taleplerini karşılamak, (2) okuyucuya yalanlar iletişim kurmak için yapmak. Sadece kullanmak için gidiyoruz ne için isteyin. Eğer arayan bir sıra varsa bu şekilde, bu talebi karşılamak için ToList aramak için ihtiyaçları yok.

Yerel değişkenler:

Ne istersen kullanmak. Senin yöntem. İç uygulama yöntemi ayrıntılarını görmek için tek anlayan sensin.

Dönüş tipi:

Önce ters olarak prensip aynı.Arayan gerektiren minimum sunuyoruz.Eğer arayan tek sıra numaralandırma yeteneği gerektirir, sadece onları IEnumerable<T> ver.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • happyjpy

    happyjpy

    22 AĞUSTOS 2009
  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011