Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于Newexpression返回匿名类型的泛型类实例_C#_Generics_Lambda_Anonymous Types - Fatal编程技术网

C# 基于Newexpression返回匿名类型的泛型类实例

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

我有一个通用类“MSAccessQueryBuilder”,使用以下方法

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>();

}