Skip to main content
 首页 » 编程设计

c#之如何动态使用 PropertyType 反射属性来创建相应的类型化 Function>

2024年02月24日19soundcode

我想使用 PropertyType 返回的类型来创建类型化函数。我发现这个相似 using type returned by Type.GetType() in c# 但这提到了如何创建一个列表,但没有提到我们如何创建一个 Func<>。请帮帮我。

伪代码:

PropertyInfo inf = typeof(SomeClass).GetProperty("PropertyName"); 
Type T=inf.PropertyType; 
Expression<Func<SomeClass,T>> le = GetPropertyOrFieldByName<SomeClass,T>("PropertyName"); 
 
static Expression<Func<TSource, TResult>> GetPropertyOrFieldByName<TSource,TResult>(string propertyOrFieldName) 
{  
ParameterExpression item = Expression.Parameter(typeof(TSource), "expr");MemberExpression prop = LambdaExpression.PropertyOrField(item, propertyOrFieldName); 
var expr = Expression.Lambda<Func<TSource, TResult>>(prop, new ParameterExpression[] { item }); 
expr.Compile(); 
return expr; 
} 

请您参考如下方法:

如果您想使用 PropertyType 调用 GetPropertyOrFieldByName,这应该可行:

PropertyInfo inf = typeof(SomeClass).GetProperty("PropertyName"); 
Type T = inf.PropertyType; 
 
object le = 
    typeof([TypeThatDeclaresMethod]).GetMethod("GetPropertyOrFieldByName") 
    .MakeGenericMethod(typeof(SomeClass), T) 
    .Invoke(null, new object[] { "PropertyName" }); 

假设 GetPropertyOrFieldByName 方法是一个公共(public)静态方法。