将foreach更改为只执行一次调用

本文关键字:一次 调用 执行 foreach | 更新日期: 2023-09-27 18:03:02

我有一个列表,我在其中调用每个item,我想做的是只使用一个调用而不是每个item:这是我的逻辑

List<Embarcaciones> embarcaciones = new List<Embarcaciones>();
foreach (ListItem item in itemsEmbarcaciones)
{
    embarcaciones.Add(new Embarcaciones
    {
        Categoria = idioma == "Espanol" ?
        item["Categoria"] == null ? string.Empty :
                 ((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria"])).LookupValue
        : item["Categoria_x003a_English"] == null ? string.Empty :
                ((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria_x003a_English"])).LookupValue,
        Title = item["Title"] == null ? string.Empty : item["Title"].ToString(),
        Imagen = item["Imagen"] == null ? string.Empty : (item["Imagen"] as FieldUrlValue).Url,
        Enlace = item["Enlace"] == null ? string.Empty : item["Enlace"].ToString(),
        Especificaciones = item["Especificaciones"] == null ? string.Empty : item["Especificaciones"].ToString(),
        Specifications = item["Specifications"] == null ? string.Empty : item["Specifications"].ToString()
    });
}
result.Embarcaciones = categoria.Contains("'"") ?
embarcaciones.Where(x => x.Categoria.ToLower().Contains(categoria.ToLower())).ToList() :
embarcaciones.Where(x => x.Categoria.ToLower().Equals(categoria.ToLower())).ToList();

我怎样才能改变我的方法,只调用一次而不是"foreach"方法?关于

将foreach更改为只执行一次调用

您要使用LINQ

List<Embarcaciones> embarcaciones = itemsEmbarcaciones.Select(x => new Embarcaciones() {
    Categoria = (idioma == "Espanol" ? (x["Categoria"] == null ? ... : ...) : ...),
    Title = ...
    ...
}).ToList();

但是你真的不应该使用这么多嵌套的三元if(真的吗?"真的":(假的?"真":"假"))。它很快就会变得非常丑陋。但如果需要,至少要使用括号。

foreach(...) embarcaciones.Add(...)替换为Select(...).ToList():

var embarcaciones = itemsEmbarcaciones.Select(item => new Embarcaciones
    {
        Categoria = idioma == "Espanol" ?
        item["Categoria"] == null ? string.Empty :
                 ((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria"])).LookupValue
        : item["Categoria_x003a_English"] == null ? string.Empty :
                ((Microsoft.SharePoint.Client.FieldLookupValue)(item["Categoria_x003a_English"])).LookupValue,
        Title = item["Title"] == null ? string.Empty : item["Title"].ToString(),
        Imagen = item["Imagen"] == null ? string.Empty : (item["Imagen"] as FieldUrlValue).Url,
        Enlace = item["Enlace"] == null ? string.Empty : item["Enlace"].ToString(),
        Especificaciones = item["Especificaciones"] == null ? string.Empty : item["Especificaciones"].ToString(),
        Specifications = item["Specifications"] == null ? string.Empty : item["Specifications"].ToString()
    }).ToList();

如果你使用的是c# 6,你也可以使用null coalescing操作符来清理,这是Visual Studio 2015中的标准:

using Microsoft.SharePoint.Client;
//...
var embarcaciones = itemsEmbarcaciones.Select(item => new Embarcaciones
    {
        Categoria = idioma == "Espanol" 
                       ? (item["Categoria"] as FieldLookupValue)?.LookupValue ?? string.Empty
                       : (item["Categoria_x003a_English"] as FieldLookupValue)?.LookupValue ?? string.Empty,
        Title = item["Title"] as string ?? string.Empty,
        Imagen = (item["Imagen"] as FieldUrlValue)?.Url ?? string.Empty,
        Enlace = item["Enlace"] as string ?? string.Empty,
        Especificaciones = item["Especificaciones"] as string ?? string.Empty,
        Specifications = item["Specifications"] as string ?? string.Empty
    }).ToList();