2010-01-20 16 views
15

DataAccessLayer'da bu gibi görünen bir FindAll yöntemim var:Bir yazım nesnesini genel bir yönteme geçirebilir miyim?

public FindResult<T> FindAll<T>() where T : Entity, new() 

ve bu tipte FindAll yöntemini yinelemeli olarak çağırmak için kullanması gereken bir Type [] dizisine sahip bir istemci kodu:

foreach (var type in typeArray) 
{  
    var result = DataAccessLayer.FindAll<type>(); 
    ... 

ama derleyici "Tip veya isim alanı bekleniyor" ile ilgili şikayetler .. Bu etrafında almak için kolay bir yolu var mı? Type.GetType() veya typeof (type) denedim ve ne işe yaramadı.

Çok teşekkürler!

cevap

13

Böyle bu, bir şey yapmak için yansıma kullanmanız gerekebilir:

DataAccessLayer.GetType().GetMethod("FindAll<>").MakeGenericMethod(type).Invoke() 

This blog post da ihtiyacınız olan bilgileri içerebilir.

+0

C#, dinamik kodlamayı desteklemiyor (C# 4.0'da desteklendiğini duydum) özgün kodumun çalışmadığını mı? – theburningmonk

+1

C# 4'deki dinamik desteğin bunu farklı bir şekilde yapmanıza izin verip vermeyeceğinden emin değilim, çünkü buradaki dinamik jenerik türünü nasıl sağlayabileceğinizi bilmiyorum. Ama ben bunu denemedim ... – Lucero

3

Jenerikler kullanıldığında, derleme zamanında türün çözümlenebilir olması gerekir. Türü çalışma zamanında sağlamaya çalışıyorsunuz.

+0

Evet, şimdi anladım, şu anda desteklenmeyen dinamik yazmayı kullanmaya çalışıyordum, ama okuma. Net 4.0, C# dinamik yazım için destek getirecek belki de yapmaya çalıştığım şey yakın gelecekte mümkün olacak! – theburningmonk

İlgili konular