2017-07-28 72 views
0

我有兩個非常相似的方法。唯一的區別是在BindingList中使用的類型,但我無法弄清楚如何爲這兩種類型創建通用方法。我想我必須使用泛型類型才能使其工作,但我無法弄清楚。這兩種類型都有一個Title屬性。如何將兩個非常相似的列表類型重構爲一個通用的方法?

private int GetObjectIndexFromTitle(string str, BindingList<MyClass1> list) 
{ 
    foreach (var item in list) 
    { 
     if (item.Title == str) 
     { 
      return list.IndexOf(item); 
     } 
    } 
    return -1; 
} 

這:

private int GetObjectIndexFromTitle(string str, BindingList<MyClass2> list) 
{ 
    foreach (var item in list) 
    { 
     if (item.Title == str) 
     { 
      return list.IndexOf(item); 
     } 
    } 
    return -1; 
} 

我已經通過了通用類型的文件看,但我無法得到它,因爲非常特殊Title財產的工作。我會喜歡這個幫助。

+3

如果它們都具有'Title'屬性,那麼對於像'IHasTitle'這樣的通用接口來說,這將是一個很好的例子。 –

回答

4

創建與接口:

public interface ITitleAware{ 
    string Title { get; } 
} 

你的類都將實現它:

public MyClass1 : ITitleAware { 
    //code 
} 

public MyClass2 : ITitleAware { 
    //code 
} 

然後:

private int GetObjectIndexFromTitle(string str, BindingList<ITitleAware> list) 
{ 
    foreach (var item in list) 
    { 
     if (item.Title == str) 
     { 
      return list.IndexOf(item); 
     } 
    } 
    return -1; 
} 
+0

感謝您的回答。所以我通常的類代碼都放在'//代碼'中,對吧? – n00dles

+0

@ n00dles是的。確保這些類有標題,否則代碼將無法編譯。 – gaheinrichs

+0

當我調用GetObjectIndexFromTitle(「string」,MyBindingListClass1)'時,它給了我第二個參數錯誤。 'BindingList 無法轉換爲BindingList '... – n00dles

-2
public static class myClass 
    { 
     public static int GetObjectIndexFromTitle<T>(T myList, string myString) 
     { 
      foreach (var item in myList) 
      { 
       if (item.Title == myString) 
       { 
        return list.IndexOf(item); 
       } 
      } 
      return -1; 
     } 
    } 

用法:

myClass.GetObjectIndexFromTitle<myClass1>(myList1, "myString1"); 
myClass.GetObjectIndexFromTitle<myClass222>(myList2222, "myString222"); 
+0

這甚至沒有編譯。 – Kyle

+0

@Kyle您是否定義了myClass1和myClass222。我不假設。代碼片段意味着成爲指向正確方向的基準。 – Ottak

+1

不,因爲您的'GetObjectIndexFromTitle'實現不需要或不依賴它們。你的方法實現將不起作用,因爲沒有約束,當試圖在'foreach'循環中使用'myList'時會發生編譯錯誤(因爲沒有什麼能保證'T'是可枚舉的),甚至修復了這個錯誤約束條件,保證'item'具有'Title'屬性。 – Kyle

相關問題