c#如何从GetType()转换为T

c#如何从GetType()转换为T,c#,entity-framework,generics,C#,Entity Framework,Generics,我有一个接收泛型T的方法 Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<T>(this); 所以我需要通过: Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<entityType>(this); 关于如何将dbEntry.Entity转换为T的任何线索?您可以使用,首先需要获取GetKeyNames方法,然后: method.MakeGenericMethod(d

我有一个接收泛型T的方法

Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<T>(this);
所以我需要通过:

Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<entityType>(this);
关于如何将dbEntry.Entity转换为T的任何线索?

您可以使用,首先需要获取
GetKeyNames
方法,然后:

method.MakeGenericMethod(dbEntry.Entity.GetType())
 .Invoke(yourInstance, new object[] { this });
您有一些选择:

  • 使方法在
    T
    上通用,将问题传递给调用方(调用方可能在编译时知道类型)
  • 将方法更改为接受
    Type
    参数,而不是泛型参数(通常不可行,但从名称
    GetKeyNames
    中可以看到)
  • 使用反射在运行时提供泛型参数,并创建可以调用的委托

除了MakeGenericMethod和其他提供的选项外,还有一个额外的选项:使C#根据参数为您推断:

List<T> GetKeyNames<T>(object whatever, T entity){
   ....
}

// Then you call it like this
Data.Helpers.EntityKeyHelper.Instance.GetKeyNames(this, dbEntry.Entity);
列出GetKeyNames(对象,T实体){
....
}
//那你就这样叫它
Data.Helpers.EntityKeyHelper.Instance.GetKeyNames(this,dbEntry.Entity);

这样,C将知道T是什么,因为它将从“dbEntry.Entity”中获取它。

如何获取字符串[]?“yourInstance”是什么?Invoke将结果作为对象返回。您可以将其转换为字符串[]
method.MakeGenericMethod(dbEntry.Entity.GetType())
 .Invoke(yourInstance, new object[] { this });
List<T> GetKeyNames<T>(object whatever, T entity){
   ....
}

// Then you call it like this
Data.Helpers.EntityKeyHelper.Instance.GetKeyNames(this, dbEntry.Entity);