【发布时间】:2013-07-17 13:53:46
【问题描述】:
此代码示例取自此答案https://stackoverflow.com/a/16491759/98706
public static Boolean PurgeDataObject(this IDataObject dataObject, Guid uid)
{
return PurgeDataObjectImpl((dynamic) dataObject, uid);
}
private static Boolean PurgeDataObjectImpl<T>(T dataObject, Guid uid)
where T : IDataObject
{
return DataProvider.DeleteDataObject<T>(uid, DataProvider.GetConnection());
}
我有类似的情况,我想在执行时根据类型返回相关的 EF 实体,以尝试清理一些现有的继承代码,如下所示:(
不同之处在于我希望函数返回一个IEnumerable<T>
GetFilteredData 没有T 的概念,所以我得到The type or namespace name 'T' could not be found (are you missing a using directive or an assembly reference?) 的编译错误
private IEnumerable<T> GetFilteredData(Type entityType, SortedList<string, string> filterList, List<int> weeks)
{
return GetFilteredDataImpl((dynamic)entityType, filterList, weeks);
}
private IEnumerable<T> GetFilteredDataImpl<T>(T entityType, SortedList<string, string> filterList, List<int> weeks) where T : EntityObject
{
var data = _modelContext.CreateObjectSet<T>().AsExpandable();
// do more filtering and then call .ToList() to return a List<T>
}
【问题讨论】:
-
好吧,在
GetFilteredData中,编译器应该如何知道 T 是什么?它不受约束,也没有定义为参数。 -
@LightStriker 是的,我在我的问题中发表了评论说
The GetFilteredData won't have a concept of T so I get the compile error我想我现在正在寻找一种替代方法。 -
您认为使用 GetFilteredData 的代码会是什么样子?
标签: c# .net generics dynamic types