c#如何从GetType()转换为T
我有一个接收泛型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
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
- 使用反射在运行时提供泛型参数,并创建可以调用的委托
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);