2016-07-11 4 views
-2

Ich habe die folgende Klasse:Verwenden typeof innerhalb Typdefinition

public void Include<T>(IQueryable<T> source) { 

    MethodInfo include = typeof(EntityFrameworkQueryableExtensions) 
    .GetMethods() 
    .First(x => x.Name == "Include" && x.GetParameters() 
    .Select(y => y.ParameterType.GetGenericTypeDefinition()) 
    .SequenceEqual(new[] { typeof(IQueryable<>), typeof(Expression<>) })); 

    LambdaExpression lambda = GetTestLambdaExpression<T>(); 

    MethodInfo method = include.MakeGenericMethod(typeof(T), lambda.ReturnType);   

    IIncludableQueryable<T, lambda.ReturnType> result = (IIncludableQueryable<T, lambda.ReturnType>)method.Invoke(null, new Object[] { source, parameter }); 

} 

ich die method.Invoke kennen einen IIncludableQueryable zurück. Aber ich bekomme einen Kompilierungsfehler auf diesem:

'lambda' is a variable but is used like a type 
+2

Fügen Sie immer die Fehlermeldung ein. –

+1

Möchten Sie den Fehler teilen? – nvoigt

+0

Sorry, verpasste das. Just updated meine Frage –

Antwort

2
IIncludableQueryable<T, lambda.ReturnType> 

Sie dies nicht tun können. Generika benötigen einen Kompilierzeittyp, der zweite generische Parameter ist jedoch ein Laufzeittyp. Sie müssen Reflektion wie in der vorherigen Zeile verwenden, wenn Sie zur Generierungszeit unbekannte Typen verwenden möchten.

+0

' dynamic' könnte einfacher sein ... könnte nicht "besser" sagen, aber definitiv einfacher. Sobald Sie in die Reflexion für Generika kommen müssen, neigt es dazu, wirklich unordentlich zu werden :-) Aber ja, die Antwort ist 100% richtig – Jcl