为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
holdtom 2021-08-29 17:43:38
我正在考虑 EF,DBContext并将其DBSets作为这个问题的背景。例如,您可以在 Repository 类中使用以下代码访问特定集。public TEntity Get(int id){    return Context.Set<TEntity>().Find(id);}whereSet<TEntity>()返回 type 的集合TEntity。这究竟是如何编码的?我试图找到它的源代码无济于事。我是否需要创建自己的类并完整地写出逻辑?
查看完整描述

3 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

我不知道 EF 是如何做到的,但是您可以使用 Types 键控的 Dictionary 轻松完成类似的操作


private Dictionary<Type, ICollection> registry = new Dictionary<Type, ICollection>();


// adds a collection of a certain type

public void Add<T>(T collection) where T: ICollection {

    registry.Add(typeof(T), collection);

}


// create an empty collection of type T and add it to registry

public void InitCollection<T>() where T: ICollection { 

    registry.Add(typeof(T), (ICollection)Activator.CreateInstance(typeof(T)));

}


// returns a collection of type T if it has been registered

public T Set<T>() where T: ICollection {

    return (T)registry[typeof(T)];

}


查看完整回答
反对 回复 2021-08-29
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我猜Enumerable.OfType<TResult>()在这里会派上用场。它返回源枚举中IEnumerable<TResult>所有类型的元素TResult。至于它的实现,MSDN是这么说的:

该方法是通过使用延迟执行来实现的。立即返回值是一个存储执行操作所需的所有信息的对象。在通过直接调用其 GetEnumerator 方法或在 Visual C# 中使用 foreach 或在 Visual Basic 中使用 For Each 来枚举对象之前,不会执行此方法表示的查询。


查看完整回答
反对 回复 2021-08-29
  • 3 回答
  • 0 关注
  • 152 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信