我有一个接收通用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?
的任何线索答案 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;
中获取它