C# List or Collection initializer using foreach loop
Asked Answered
O

1

7

Is it possible in C# to do something similar to the following?

var tigerlist = new List<Tigers>(){ Tail = 10, Teeth = 20 };

var tigers_to_cats_approximation = new List<Cat>()
{    
     foreach (var tiger in tigerlist)
     {                 
           new Cat()
           {
               Tail = tiger.Tail / 2,
               Teeth = tiger.Teeth / 3,
               HousePet = true,
               Owner = new Owner(){ name="Tim" }
           }
     }
}

I'm doing some XML apis and the request objects coming in are similar to the response objects that need to go out. The above would be incredibly convenient if it were possible; much more so than auto-mapper.

Orola answered 31/7, 2018 at 18:26 Comment(4)
var tigers_to_cats_approximation = tigerlist.Select(tiger => new Cat() { Tail = tiger.Tail / 2, Teeth = tiger.Teeth / 3, HousePet = true, Owner = new Owner(){name="Tim"} }).ToList();?Efren
You might consider creating a conversion method that takes in a Tiger and returns a Cat (i.e. public Cat ConvertToCat(Tiger tiger) { return new Cat() { Tail = tiger.Tail / 2, Teeth = tiger.Teeth / 3, HousePet = true, Owner = new Owner() { name="Tim" } }; }), which you could then call using a Select statement on the tigerList, like: var catsFromTigers = tigerList.Select(tiger => ConvertToCat(tiger)).ToList();Solicitor
@RufusL I like the idea! and one can shorten it further with tigerList.Select(ConvertToCat).ToList();Efren
Can you have a select inside a select? For example, if another property of cat needs to be converted. For example if owner was a list of owners needs to be converted from another list still: OwnerList = tiger.Ownerlist.Select(owner => new HouseOwner(){ NewOwner = owner + "new" }).ToList()Orola
E
10

You can use the Select clause along with ToList():

var tigers_to_cats_approximation =
    tigerlist
        .Select(tiger => new Cat()
        {
            Tail = tiger.Tail / 2,
            Teeth = tiger.Teeth / 3,
            HousePet = true,
            Owner = new Owner() { name = "Tim" }
        })
        .ToList();
Efren answered 31/7, 2018 at 18:36 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.