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

时间:2014-05-30 21:34:16

标签: c# entity-framework generics

我有一个接收通用T

的方法
Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<T>(this);

T应该是:

Type entityType = dbEntry.Entity.GetType();

所以我需要通过:

Data.Helpers.EntityKeyHelper.Instance.GetKeyNames<entityType>(this);

但是它给我发了一个错误:

The type or namespace name 'entityType' could not be found (are you missing a using directive or an assembly reference?)

关于如何将dbEntry.Entity转换为T?

的任何线索

3 个答案:

答案 0 :(得分:0)

您可以使用MakeGenericMethod,首先需要获得GetKeyNames方法:

method.MakeGenericMethod(dbEntry.Entity.GetType())
 .Invoke(yourInstance, new object[] { this });

答案 1 :(得分:0)

你有一些选择:

  • T上使您的方法通用,将问题传递给调用者(可能在编译时知道类型)
  • 更改方法以接受Type参数而非通用(通常不可行,但可能来自名称GetKeyNames<T>
  • 使用反射在运行时提供泛型参数,并创建一个可以调用的委托。

答案 2 :(得分:0)

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

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

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

通过这种方式,C#将知道T是什么,因为它将从&#34; dbEntry.Entity&#34;

中获取它