C# 基于匿名类型创建泛型类实例

C# 基于匿名类型创建泛型类实例,c#,.net,anonymous-types,C#,.net,Anonymous Types,我有一个类ReportingComponent,它具有构造函数: public ReportingComponent(IQueryable<T> query) {} 查询的类型为IQueryable编写泛型方法并使用类型推断。我经常发现,如果您创建一个与泛型类同名的静态非泛型类,那么这种方法很有效: public static class ReportingComponent { public static ReportingComponent<T> CreateI

我有一个类
ReportingComponent
,它具有构造函数:

public ReportingComponent(IQueryable<T> query) {}

查询的类型为
IQueryable编写泛型方法并使用类型推断。我经常发现,如果您创建一个与泛型类同名的静态非泛型类,那么这种方法很有效:

public static class ReportingComponent
{
  public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
  {
    return new ReportingComponent<T>(query);
  }
}
编辑:我们需要非泛型类型的原因是,类型推断只发生在泛型方法上,即引入新类型参数的方法。我们不能将其放在泛型类型中,因为我们仍然必须能够指定泛型类型才能调用该方法,这会破坏整个要点:)


我有一个更详细的示例。

在尝试编译时,我遇到了一个错误:找不到类型或名称空间名称“T”(是否缺少using指令或程序集引用?)似乎仍然无法推断T的类型:(谢谢Jared。这是在火车站的台阶上编写代码的问题:)一个问题,为什么我们需要非泛型类?为什么它不只适用于泛型类?类型推断应该仍然有效。我觉得奇怪的是,原始泛型类上的
new()
子句阻止了这种方法,但它确实阻止了这种方法……@MPelletier:我不确定你的意思。它真的不应该。。。也许可以问一个新问题,举个例子?
public static class ReportingComponent
{
  public static ReportingComponent<T> CreateInstance<T> (IQueryable<T> query)
  {
    return new ReportingComponent<T>(query);
  }
}
var report = ReportingComponent.CreateInstance(query);