如何将具有非常相似列表类型的两个方法重构为泛型方法?

时间:2017-07-28 20:10:36

标签: c# function generics methods refactoring

我有两种非常相似的方法。唯一的区别是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;
}

我查看了Generic Type文档,但由于非常具体的Title属性,我无法使其工作。我希望得到一些帮助。

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:-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");