将对象类型作为参数传递

时间:2013-12-10 08:26:28

标签: c# object types parameter-passing

我想替换以下函数,我的项目中存在几乎完全相同的函数副本,只有不同的对象类型。我想要做的是将对象类型作为参数传递。

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'“

类型的操作数

我读过类似于使用泛型的东西,但我不认为在这种情况下有用。

3 个答案:

答案 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;
}