Search code examples
c#.netcode-duplication

Reduce code duplicates


Currently I have quite many classes (5) that have just 2 properties but have different names for different purposes:

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; }
}

Then I have for each of those classes a method that will return 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;
    }

Any advise how can I better make this code?


Solution

  • Use a base class to put the shared properties and functions in:

    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
    }