August 22, 2019

C# - How to create List of Anonymous Type objects

Many times you need to create a temporary list of anonymous type objects. For small tasks, like binding a list to a DropDownList control. At that moment you don't want to define a separate class just to keep two properties (i.e. Id & Name) and bind it to the DropDownList's DataSource.

There could be numerous ways to define list of anonymous types and all of these need to infer type from somewhere. I will write some of them here which you can use to create generic list.

  1. First create the object(s) of anonymous type and then pass it to an array and call ToList() method.

       var o1 = new { Id = 1, Name = "Foo" };
       var o2 = new { Id = 2, Name = "Bar" };
    
       var list = new[] { o1, o2 }.ToList();
      
  2. Define a list of dynamic and then populate with anonymous objects.

       List<dynamic> list = new List<dynamic>();
       var o1 = new { Id = 1, Name = "Foo" };
       var o2 = new { Id = 2, Name = "Bar" };
    
       list.Add(01);
       list.Add(02);
      
  3. Define a generic method accepting params T[], and return new List<T>. Pass objects of anonymous type to this method and it will create the List<T>.

       //Define method
       public static List<T> CreateList<T>(params T[] items)
       {
         return new List<T>(items);
       }
    
       //create anonymous objects and call above method
       var o1 = new { Id = 1, Name = "Foo" };
       var o2 = new { Id = 2, Name = "Bar" };
       var list = CreateList(o1, o2);
      
  4. You can use Select() method on Enumerable.Range() to project anonymous objects and then call ToList() method. Once empty list is created, then start adding objects.

       var list = Enumerable.Range(0, 0).Select(e => new { Id = 0, Name = ""}).ToList();
       list.Add(new { Id = 1, Name = "Foo" } );
       list.Add(new { Id = 2, Name = "Bar" } );
      
  5. Enumerable.Repeat() method can also do the trick.

       var list = Enumerable.Repeat(new { Id = 0, Name = "" }, 0).ToList();
       list.Add(new { Id = 1, Name = "Foo" } );
       list.Add(new { Id = 2, Name = "Bar" } );
      
  6. Select() projection method can also use on simple string.

       var list = "".Select( t => new {Id = 0, Name = ""} ).ToList();
       list.Add(new { Id = 1, Name = "Foo" } );
       list.Add(new { Id = 2, Name = "Bar" } );
      

No comments:

Post a Comment