2010-10-04 21 views
8

Bir mülk üzerinde ToString arayıp yerel bir değişkene değer atar bir ifade yazmaya çalışıyorum. Ancak, ToString'i ToString'in aşırı yüklenmesiyle bir nesne örneğinde çağırmak, "Ambigous Match Found" öğesinin istisna edilmesine neden olur. Örneğin bunun için aşırı yükleme yaparak varsaExpression.Call ve "Belirsiz Maç Bulundu"

var result = Expression.Variable(typeof(string), "result"); 
var matchTypeParameter = Expression.Parameter(typeof(MatchType), "matchType"); 
var targetProperty = Expression.Property(leadParameter, target); 

var exp = Expression.Block(
    //Add the local current value variable 
    new[] { result }, 

    //Get the target value 
    Expression.Assign(result, Expression.Call(targetProperty, typeof(string).GetMethod("ToString"), null)) 

); 

nasıl ToString çağırabilirsiniz: İşte bir örnek? Teşekkürler! Sıfır argüman (boş tip dizisi) alır "ToString" adlı yöntem, başka deyişle

typeof(string).GetMethod("ToString", Type.EmptyTypes) 

olsun:

typeof(string).GetMethod("ToString") 

olarak:

cevap

13

değiştirin.

+1

Bu benim teşekkür, aradığı tam olarak ne oldu! Daha önce Type.EmptyTypes'ı hiç duymadım. Tavsiye edeceğiniz şeyleri tartışan bir yansıma kitabı var mı? –

+0

Type.EmptyTypes sadece kestirme (ve slighly daha verimli) olan 'yeni Type [0] '. Üzgünüm, kitap bir insan değilim, ama sadece (Expression' 'tüm yöntemlere ek olarak)' MethodInfo', 'FieldInfo' ve' Type' için kaynak kodunu incelerken * a * şey öğreneceksiniz. –

+0

Teşekkürler. Sen benim günümü kurtardın –