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