2014-04-03 20 views
2

我試圖重構一些代碼,因爲我有大約7出現這樣的代碼的特性:傳遞類在C#中的參數,然後想訪問

List<RHEvent> eventResults = DBConnection.Table<RHEvent>().Where(t => (int)t.PreferredImage == ID).ToList(); 
foreach (RHEvent result in eventResults) 
{ 
    result.PreferredImage = 0; 
    DBConnection.Update(result); 
} 

其中RHEvent更改爲不同的類名稱通過不同的事件。

我已經開始嘗試編寫更通用的代碼,但我遇到了一個障礙。以下是我到目前爲止有:

private void ResetPreferredImage<T>(int ID) where T: new() 
{ 
    List<T> results = DBConnection.Table<T>().Where(t => (int)t.PreferredImage == ID).ToList(); 
} 

的問題是,編譯器不喜歡PreferredImage因爲它不能識別它的抽象類。

有沒有辦法讓編譯器確認該屬性是否存在,或者是否無法做到我正在嘗試做的事情?

謝謝。

菲利普

+1

你的類將所有需要實現定義的'PreferredImage'特性的通用接口。 –

+0

來自定義PreferredImage的某個基類的接口或繼承。當然,如果你使用某種ORM,你可能會有自動生成的POCO,這可能會使這一點變得更加困難。我不會推薦反思方法,但可以這樣做。 – cgotberg

+0

是你使用任何一種ORM –

回答

2

,你可以嘗試這樣的事情

private void ResetPreferredImage<T>(int ID) where T : BaseClass,new() 
     { 
      List<T> results = DBConnection.Table<T>().Where(t => (int)t.PreferredImage == ID).ToList(); 
     } 

現在,編譯器將識別PreferredImage物業作爲基類

+0

謝謝 - 這正是我正在尋找的。 –