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

  • CNET

    CNET

    5 Mayıs 2006
  • spyib

    spyib

    9 Ocak 2007
  • The Brister

    The Brister

    10 ŞUBAT 2008