减少代码重复

Dav*_*ury 0 .net c# code-duplication

目前我有很多类(5)只有2个属性,但有不同的名称用于不同的目的:

public class Class1
{
    public Class1()
    {

    }

    public string Id { get; set; }
    public string Value { get; set; }
}

public class Class2
{
    public Class2()
    {

    }

    public string Id { get; set; }
    public string Value { get; set; }
}


........

  public class Class5
 {
    public Class5()
    {

    }

    public string Id { get; set; }
    public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我为每个类都有一个返回a的方法List<Class>.

 public static List<Class1> GetClass1()
    {
        Dictionary<string, string> s = GetSomeResults1();

        List<Class1> _s = new List<Class1>();

        foreach (var item in s)
        {
            Class1 c = new Class1();
            c.Id = item.Key;
            c.Value = item.Value;

            _s.Add(c);
        }

        return _s;
    }


  public static List<Class2> GetClass2()
    {
        Dictionary<string, string> s = GetSomeResults2();

        List<Class2> _s = new List<Class2>();

        foreach (var item in s)
        {
            Class2 c = new Class2();
            c.Id = item.Key;
            c.Value = item.Value;

            _s.Add(c);
        }

        return _s;
    }

  ......

   public static List<Class5> GetClass5()
    {
        Dictionary<string, string> s = GetSomeResults5();

        List<Class5> _s = new List<Class5>();

        foreach (var item in s)
        {
            Class5 c = new Class5();
            c.Id = item.Key;
            c.Value = item.Value;

            _s.Add(c);
        }

        return _s;
    }
Run Code Online (Sandbox Code Playgroud)

有什么建议我怎样才能更好地制作这段代码?

Pat*_*man 11

使用基类将共享属性和函数放在:

public class BaseClass
{
    public string Id { get; set; }
    public string Value { get; set; }

    // shared properties and methods
}

public class Class1 :  BaseClass
{
    // own properties and methods
}

public class Class2 :  BaseClass
{
    // own properties and methods
}
Run Code Online (Sandbox Code Playgroud)