SORU
13 Ocak 2012, Cuma


Neden C dizisi gibi bir Liste başlatmak miyim#?

Bugün C# yapabileceği bulmak için sürpriz oldu:

List<int> a = new List<int> { 1, 2, 3 };

Neden bunu yapabilir miyim? Ne kurucu denir? Nasıl kendi sınıfları ile bunu yapabilir miyim? Bu diziler başlatmak için yol olduğunu biliyorum ama diziler öğeleri ve Listeleri basit nesnelerdir dil

CEVAP
13 Ocak 2012, Cuma


Bu koleksiyonu başlatıcı sözdizimi bir parçası .NET. Sürece oluşturduğunuz herhangi bir toplama bu sözdizimi kullanabilirsiniz:

  • IEnumerable (tercihen IEnumerable<T>) uygular

  • Bir yöntem Add(...) adında

Ne varsayılan oluşturucu denir, ve sonra Add(...) başlatıcı her üyesi için denir.

Böylece, bu iki blok kabaca aynıdır:

List<int> a = new List<int> { 1, 2, 3 };

Ve

List<int> temp = new List<int>();
temp.Add(1);
temp.Add(2);
temp.Add(3);
List<int> a = temp;

SanaolabilirEğer isterseniz başka bir kurucusunu çağırmak, örneğin önlemek için aşırı boyutlandırma List<T> büyüyen sırasında, vb:

// Notice, calls the List constructor that takes an int arg
// for initial capacity, then Add()'s three items.
List<int> a = new List<int>(3) { 1, 2, 3, }

Add() yöntem, örneğin Dictionary<TKey, TValue> Add() yöntemi iki öğe alır: tek bir öğe almak gerekir unutmayın

var grades = new Dictionary<string, int>
    {
        { "Suzy", 100 },
        { "David", 98 },
        { "Karen", 73 }
    };

Kabaca aynıdır:

var temp = new Dictionary<string, int>();
temp.Add("Suzy", 100);
temp.Add("David", 98);
temp.Add("Karen", 73);
var grades = temp;

Bu yüzden eklemek için kendi sınıf, tüm ihtiyacınız mı olarak geçiyor uygulamak IEnumerable (tekrar, tercihen IEnumerable<T>) oluşturmak ve bir veya daha fazla Add() yöntem:

public class SomeCollection<T> : IEnumerable<T>
{
    // implement Add() methods appropriate for your collection
    public void Add(T item)
    {
        // your add logic    
    }

    // implement your enumerators for IEnumerable<T> (and IEnumerable)
    public IEnumerator<T> GetEnumerator()
    {
        // your implementation
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }
}

Sonra KÜÇÜK koleksiyonları gibi kullanabilirsiniz:

public class MyProgram
{
    private SomeCollection<int> _myCollection = new SomeCollection<int> { 13, 5, 7 };    

    // ...
}

(Daha fazla bilgi için MSDN)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • 3dmmfavs

    3dmmfavs

    29 Kasım 2009
  • UberFacts

    UberFacts

    26 EKİM 2013
  • UniqueApps

    UniqueApps

    4 Ocak 2009