gpt4 book ai didi

c# - C# 中的泛型类型

转载 作者:行者123 更新时间:2023-11-30 19:16:42 26 4
gpt4 key购买 nike

对于 Loan、Client 和 Book 类型,我有三个类似的方法。我是一名编程学生,我想知道是否可以传入参数,一个与这 3 个类匹配的泛型类型,我的意思是在括号之间传递一个不同的类型,如 <T> ,三个类只有一个方法。我试过 <object>但它不起作用。

public void LoadStoreLoans(ObservableCollection<Loan> loansCollection)
{
IList<Loan> loans = db.Query<Loan>(); //db4o
loansCollection = loans != null ? new ObservableCollection<Loan>(loans) : new ObservableCollection<Loan>();
}

谢谢。

最佳答案

是的,如果你总是替换它(这不是可观察集合的目的),我建议让集合成为一个返回值:

public ObservableCollection<T> LoadStoreCollection<T>()
{
IList<T> queried = db.Query<T>();
return queried != null ? new ObservableCollection<T>(queried) : new ObservableCollection<T>();
}

第一次尝试使用对象:我从未使用过 db4o,但我认为它在 Load 中使用给定的类型参数( TQuery)函数来推断要查询哪个表。鉴于 object产生错误,因为没有 object 的表.您需要指定代理类型或更好的类型 - 泛型类型参数 - 它将在执行期间绑定(bind)到实际类型。当用 T = Loan 调用时, db.Query电话可以查询Loan表格就好像你会写 db.Query<Loan>首先。

由于集合是问题中的一个参数,因此可能会认为您会针对同一个 T 多次调用该函数。 , 但:始终使用 new 重新初始化相同的可观察集合变量禁用可观察集合可以提供的所有好处,例如,您永远不会收到集合更改事件(因为您监听被替换的集合),您不能将它绑定(bind)到控件,如果您将其他对象注册到该事件,你会引入一个内存洞:)

关于c# - C# 中的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172779/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com