Type içeren bir değişkenle Generic <T> tipi bir örnek oluşturma


85

Aşağıdaki kodu elde etmek mümkün mü? İşe yaramadığını biliyorum, ama bir çözüm olup olmadığını merak ediyorum.

Type k = typeof(double);
List<k> lst = new List<k>();

Yorumunuz biraz karıştı "bu, C # 4.0 ile başarılabilir." Yapamaz, en azından gösterdiğiniz şekilde değil. C # 4 hala genel tür parametrelerinin derleme sırasında belirtilmesini gerektirir; Tür değişkenini genel bir tür parametresi olarak hala iletemezsiniz.
— itowlson

1
Lütfen soru sorulduğunda bir şeyler ifade edin. Belirtilen kod, C # 4.0 ile gerçekleştirilemez.
— Lasse V.Karlsen


C # 4.0 olayı için üzgünüm. Cevabın C # 4.0'daki kavramları kullanabileceğini, kodun C # 4.0'da çalışacağını kastetmiştim. DrJokepu düzenlemesi için teşekkürler.
— Chris

12
Bence bu soru mükemmel bir şekilde ifade edildi - sadece doğru miktarda ayrıntı!
— RunHolt

Yanıtlar:


119

Evet var:

var genericListType = typeof(List<>);
var specificListType = genericListType.MakeGenericType(typeof(double));
var list = Activator.CreateInstance(specificListType);

Sanırım istediğim bu. Tekrar kontrol edeyim, ben de sizin yanıtınızı bir an için işaretleyeceğim.
— Chris

3
Sanırım buradaki asıl sorun, bize ne istediğinizi anlatmamanız . Sana en başarısız bir girişimi göstermektedir şey ve sonra ne başarmak nasıl sorar istediğiniz . Tahmin değil cevaplar istiyorsan, bunu nasıl yapmaya çalıştığın yerine ne yapman gerektiğini açıklamalısın.
— Lasse V.Karlsen

Temel olarak, türün bir Tür değişkeni olarak belirtildiği bir Liste <> oluşturmak istiyorum.
— Chris

3
Teşekkürler David M, kodunuz tam olarak ihtiyacım olan şeyi yapıyor. Yeterli bir soru sormadığım için cevap veremeyenlere özür dilerim.
— Chris

Genel Yöntemler için aynı yolu yapmak mümkün müdür? yöntem için dinamik türü
— geçmem

3

Daha temiz bir yol, genel bir yöntem kullanmak olabilir. Bunun gibi bir şey yapın:

static void AddType<T>()
    where T : DataObject
{
    Indexes.Add(typeof(T), new Dictionary<int, T>());
}

"Dizinler" ile ne demek istediğinizden emin değilim, bu başka bir yerde açıklanan bir değişken mi?
— JRH
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.