猿问

有没有办法根据类型在类中查找集合?

我正在考虑 EF,DBContext并将其DBSets作为这个问题的背景。例如,您可以在 Repository 类中使用以下代码访问特定集。


public TEntity Get(int id)

{

    return Context.Set<TEntity>().Find(id);

}

whereSet<TEntity>()返回 type 的集合TEntity。这究竟是如何编码的?我试图找到它的源代码无济于事。我是否需要创建自己的类并完整地写出逻辑?


holdtom
浏览 153回答 3
3回答

繁星coding

我不知道 EF 是如何做到的,但是您可以使用 Types 键控的 Dictionary 轻松完成类似的操作private Dictionary<Type, ICollection> registry = new Dictionary<Type, ICollection>();// adds a collection of a certain typepublic void Add<T>(T collection) where T: ICollection {&nbsp; &nbsp; registry.Add(typeof(T), collection);}// create an empty collection of type T and add it to registrypublic void InitCollection<T>() where T: ICollection {&nbsp;&nbsp; &nbsp; registry.Add(typeof(T), (ICollection)Activator.CreateInstance(typeof(T)));}// returns a collection of type T if it has been registeredpublic T Set<T>() where T: ICollection {&nbsp; &nbsp; return (T)registry[typeof(T)];}

噜噜哒

我猜Enumerable.OfType<TResult>()在这里会派上用场。它返回源枚举中IEnumerable<TResult>所有类型的元素TResult。至于它的实现,MSDN是这么说的:该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 GetEnumerator 方法或在 Visual C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象之前,不会执行此方法表示的查询。
随时随地看视频慕课网APP
我要回答