我有多个不同对象的列表。 对于所有对象,如果它是一个空列表,我想返回null或返回完整列表。 我该如何实现? 我想做类似的事情
address = person.addresses.tolist().count > 0 ? person.addresses.tolist : null;
aliases = person.aliases.tolist().count > 0 ? person.aliases.toList() : null;
trackingCodes = person.trackingCodes .tolist().count > 0 ? person.trackingCodes .toList() : null;
在上面的代码行中,我两次计算地址列表。
我想知道我是否可以创建一个扩展方法以用作
address = patient.addresses.tolist().GetListOrNull()
并且GetListOrNull()
方法返回list或null值。
这可能吗?
答案 0 :(得分:0)
扩展方法必须在静态类中,并且必须是静态的。
您可以这样写:
public static class EnumerableExtensions
{
public static IList<T> GetListOrNull<T>(this IEnumerable<T> items)
{
if (items == null)
{
return null;
}
// optimization to avoid creating a new list when the input already implements `IList`
if (!(items is IList<T> tmp))
{
tmp = items.ToList();
}
return tmp.Any() ? tmp : null;
}
// or a list-specific version
public static IList<T> GetListOrNull<T>(this IList<T> items)
{
if (items == null)
{
return null;
}
return items.Any() ? items : null;
}
}
答案 1 :(得分:-1)
这是一个可在IEnumerable上使用的版本,因此它可以更通用一些。 我认为.Any()比.Count> 0
更为简洁public static class MyExtentions
{
public static IEnumerable<T> ToNullIfEmpty<T>(this IEnumerable<T> container)
{
if(container == null || !container.Any())
return null;
else
return container;
}
}