2009-10-21 17 views
8

Genel bir yöntem TResult Foo<TSource, TResult>(IEnumerable<TSource> source) var ve TResultdynamic olarak bildirildi Farklı tür bildirimlerinden farklı bir kod yolu yürütmek istiyorum.Tipeof (dinamik) için nasıl test yaparım?

if (typeof(TResult) == typeof(int)) 
    return ExpressionFactory.CreateExpandoFunction<TSource, TResult>(); 

Ama if (typeof(TResult) == typeof(dynamic)) derleme değil: Eğer gibi şeyler yapabilirsiniz düzenli türleri için

. dinamik kendisi ben için test edilmesi gereken bir tür değil

dyanmic x = Foo<int, dynamic>(list); 

beri:

yöntem bildirimiyle çağrıldığında zamanında belirlenmesi bu tür yapmak için yine de var mı? IDynamicMetaObjectProvider?

EDIT Bu, SQL metninin bir parçası olan System.Linq.Expression değerlendiricisinin parçasıdır. Basitçe olamaz dinamik hiçbir türü olduğundan konuşan

if (type is struct) 
    create selector that initializes each element to result values 
else if (type is class) 
    create selector that initialize each element to new instance and set member properties 
else if (type is dynamic) 
    create selector that initializes each element to new `ExpandoObject` and populates/sets member properties 
+0

Bunun için mi ihtiyacınız var? – Gishu

cevap

10

: TResult dinamik ise dallara özel istek şuna benzer bazı sözde mantığı içindir. Tür dinamik, tür meta verilerde görünüyorsa, özel bir öznitelik (Dinamik) ile nesne olarak yazılır. Esasen tipik olarak (dinamik), çoğu amaç için typeof (object) 'den farklı değildir.

+2

evet sadece Debug.Write (typeof (TResult) .FullName yaptı ve gerçekten System.Object öğesinin – dkackman

1

Belirli bir nesne türü olması için dynamic olarak bildirilen nesneler için gerekli değildir. Bu, DynamicObject'un bir alt sınıfı olabilir (ve böylece operasyonlar için özel mantık sağlar), ancak normal bir nesne de olabilir (@JaredPar'ın dediği gibi).

Belki de, dynamic nesneleri için ne tür bir dal yapmak istediğinizi açıklarsanız daha iyi bir çözüm bulmak mümkün olabilir.

+0

bazı açıklamaları ekledi. – dkackman

İlgili konular