2017-07-28 19 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

相关问题