c#避免在使用迭代时检查nulls

  • 本文关键字:nulls 迭代 c# foreach null
  • 更新时间 :
  • 英文 :

private void CheckForNewItems()
    {
        var items = GetChangedItems();
        if (items != null)
        {
            foreach (var item in items )
            {
                var itemDB= GetItem(item.id);
                if (itemDB!=null)
                {
                    itemDB.somevalue= item.somevalue;
                    SaveToDatabase(itemDB);
                }
            }
        }
    }

我编写了类似于上面代码的代码很多。在这种情况下,是否有更聪明的方法检查无效的方法?" if(item!= null("是否有效?我什至不得不检查空吗?

问候

您可以使用一些linq:

进行操作
var items = GetChangedItems();
if (items == null)
    return;
var existingItems = items
    // create a new call that holds both objects
    .Select(i => new { ItemDB = GetItem(i.id), Item = i })
    // where the itemdb can be found.
    .Where(i => i.ItemDB != null);
foreach (var item in existingItems)
{
    item.ItemDB.somevalue= item.Item.somevalue;
    SaveToDatabase(item.ItemDB);
}

但是....我认为您已经拥有的解决方案对每个人都更可读。

创建一个扩展方法NullOrEmpty,该方法检查集合是否为空并返回空:

public static IEnumerable<T> NullOrEmpty<T>(this IEnumerable<T> source)
{
    return source ?? Enumerable.Empty<T>();
}

然后使用它:

foreach (var item in items.NullOrEmpty())
{
   ...
}

这是一个合理的解决方案,没有太多更改。我只会更改第一个以防止筑巢:

private void CheckForNewItems()
{
    var items = GetChangedItems();
    if (items == null)
    {
        return;
    }
    foreach (var item in items )
    {
        var itemDB= GetItem(item.id);
        if (itemDB!=null)
        {
            itemDB.somevalue= item.somevalue;
            SaveToDatabase(itemDB);
        }
    }
}

您可以使用空传播。但是,您的savetodatabase方法必须检查null本身。它也可以使用零繁殖

private void CheckForNewItems()
    {
        var items = GetChangedItems();
        if (items != null)
        {
            foreach (var item in items )
            {
                var itemDB= GetItem(item.id);
                itemDB?.somevalue= item.somevalue;
                SaveToDatabase(itemDB);                   
            }
        }
    }

请查看:https://roslyn.codeplex.com/discussions/540883

相关内容

  • 没有找到相关文章

最新更新