我想替换以下函数,我的项目中存在几乎完全相同的函数副本,只有不同的对象类型。我想要做的是将对象类型作为参数传递。
private void reloadBooks()
{
var books = session.Query.All<Book>();
boklist = new System.ComponentModel.BindingList<Book>(books.ToList<Book>());
lstBooks.ItemsSource = boklist;
}
我在考虑这样的事情:
private void getRecordsOfType(object objObject)
{
System.ComponentModel.BindingList<objObject.GetType()> recordList = new System.ComponentModel.BindingList<objObject.GetType()>();
var records = session.Query.All<objObject.GetType()>();
recordList = new System.ComponentModel.BindingList<objObject.GetType()>(records.ToList<bjObject.GetType()>());
return recordList;
}
但这似乎不起作用,我得到以下信息:
“运营商”&lt;'不能应用于'方法组'和'System.Type'“
类型的操作数
我读过类似于使用泛型的东西,但我不认为在这种情况下有用。
答案 0 :(得分:6)
泛型正是你想要的:
private BindingList<T> getRecordsOfType<T>()
{
var records = session.Query.All<T>();
return new System.ComponentModel.BindingList<T>(records.ToList<T>());
}
答案 1 :(得分:3)
试试这个:
private System.ComponentModel.BindingList<T> getRecordsOfType<T>()
{
System.ComponentModel.BindingList<T> recordList = new System.ComponentModel.BindingList<T>();
var records = session.Query.All<T>();
recordList = new System.ComponentModel.BindingList<T>(records.ToList<T>());
return recordList;
}
答案 2 :(得分:2)
使用泛型类型参数:
private BindingList<T> getRecordsOfType<T>()
{
var records = session.Query.All<T>();
recordList = new System.ComponentModel.BindingList<T>(records.ToList<T>());
return recordList;
}