2013-12-10 74 views
1

我想替換下面的函數,這個函數幾乎完全相同的副本存在於我的項目中,只有不同的對象類型。我想要做的是傳遞一個對象類型作爲參數。傳遞一個對象類型作爲參數

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

但是,這似乎並沒有工作,我得到以下信息:

「操作員 '<' 不能應用於「方法組」和「System.Type」類型的操作數「

我讀了類似於使用泛型的東西,但我不認爲在這種情況下有用。

+2

那麼你*的*嘗試使用泛型 - 你試圖傳遞'objObject.GetType()'作爲一個泛型類型參數。但是類型參數是在編譯時評估的,而不是執行時間。你應該使*你的*方法通用。 –

回答

5

泛型是你想要什麼:

private BindingList<T> getRecordsOfType<T>() 
{ 
    var records = session.Query.All<T>(); 
    return new System.ComponentModel.BindingList<T>(records.ToList<T>()); 
} 
+0

真棒,完美的作品! –

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

使用泛型類型參數:

private BindingList<T> getRecordsOfType<T>() 
{ 
    var records = session.Query.All<T>(); 
    recordList = new System.ComponentModel.BindingList<T>(records.ToList<T>());  
    return recordList; 
} 
相關問題