使用foreach循环的C#列表或集合初始化器

7
在C#中是否可以做类似以下的操作?
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" }
           }
     }
}

我正在进行一些 XML API 的开发,请求对象与需要返回的响应对象非常相似。如果可能的话,这将非常方便;比自动映射更加实用。


6
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();将老虎列表转换为猫列表的近似值,代码如上。 - Ousmane D.
你可以考虑创建一个转换方法,该方法接受一个 Tiger 对象并返回一个 Cat 对象(例如 public Cat ConvertToCat(Tiger tiger) { return new Cat() { Tail = tiger.Tail / 2, Teeth = tiger.Teeth / 3, HousePet = true, Owner = new Owner() { name="Tim" } }; }),然后在 tigerList 上使用 Select 语句调用该方法,如下所示:var catsFromTigers = tigerList.Select(tiger => ConvertToCat(tiger)).ToList(); - Rufus L
@RufusL 我喜欢这个想法!而且可以用tigerList.Select(ConvertToCat).ToList();进一步缩短它。 - Ousmane D.
你可以在一个select语句中嵌套另一个select语句吗?例如,如果需要转换cat的另一个属性。例如,如果owner是一个所有者列表,需要从另一个列表进行转换:OwnerList = tiger.Ownerlist.Select(owner => new HouseOwner(){ NewOwner = owner + "new" }).ToList() - Watson
1个回答

10
你可以使用Select子句和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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接