C# 基于Newexpression返回匿名类型的泛型类实例
我有一个通用类“MSAccessQueryBuilder”,使用以下方法C# 基于Newexpression返回匿名类型的泛型类实例,c#,generics,lambda,anonymous-types,C#,Generics,Lambda,Anonymous Types,我有一个通用类“MSAccessQueryBuilder”,使用以下方法 public I_QueryBuilder<T> Select(Expression<Func<T, object>> fieldNames) { NewExpression nEx = (NewExpression)fieldNames.Body; MsAccessQueryBuilder<"Anonymous Type Of Expres
public I_QueryBuilder<T> Select(Expression<Func<T, object>> fieldNames)
{
NewExpression nEx = (NewExpression)fieldNames.Body;
MsAccessQueryBuilder<"Anonymous Type Of Expression"> x = new MsAccessQueryBuilder<"Anonymous Type Of Expression">();
}
我自己试了8个小时,但运气不好
是否可以从NewExpression或LambdaExpression获取匿名类型并创建该匿名类型的泛型类的实例
请帮忙
谢谢你你可以这样做
var genericType = typeof(MsAccessQueryBuilder<>);
var specificType = genericType.MakeGenericType(typeof(nEx));
var x = Activator.CreateInstance(specificType);
var genericType=typeof(MsAccessQueryBuilder);
var specificType=genericType.MakeGenericType(typeof(nEx));
var x=Activator.CreateInstance(specificType);
必须将方法签名更改为Func委托返回类型,将其更改为泛型,而不是对象。解决了此问题
public I_QueryBuilder<TResult> Select(Expression<Func<T, TResult>> fieldNames)
{
return new MsAccessQueryBuilder<TResult>();
}
public I_QueryBuilder选择(表达式字段名)
{
返回新的MsAccessQueryBuilder();
}
您能给我们一些关于实际行为的信息吗?编译器错误还是运行时错误?或者它只是没有按预期工作?实际上,我不知道如何创建匿名类型的泛型类以及如何从变量“nEx”获取类型。嗨,我需要基于lambda表达式传递的匿名对象创建泛型类的实例(其中lambdaexpression的主体始终是“newexpression”的类型)不是通过表达本身
public I_QueryBuilder<TResult> Select(Expression<Func<T, TResult>> fieldNames)
{
return new MsAccessQueryBuilder<TResult>();
}