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
Bu koleksiyonu başlatıcı sözdizimi bir parçası .NET. Sürece oluşturduğunuz herhangi bir toplama bu sözdizimi kullanabilirsiniz:
IEnumerable
(tercihenIEnumerable<T>
) uygularBir 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)
nasıl 'inş std::başlatmak vector&...
Neden XML myObject dönmek[] beklediğim...
Nasıl bir kullanıcı bir liste öğesi üz...
Python katılın, neden dize.liste yerin...
Nasıl statik bir Harita Başlatmak miyi...