正如我经常这样做,我想知道是否有一个简洁的方法来跳过使用变量.我有一个函数返回一个未知长度的List.我想将结果添加到另一个列表中,并且还知道我是否返回了一个空列表.我可以将
我也可以这样做:
myList.AddRange(getFiles(path)); if(getFiles(path).Count == 0) { doSomething(); }
getFiles是一个示例函数,它返回路径中的文件列表
然而,我必须两次调用该函数.
这更像是一个编程风格的问题,因为我很缺乏经验.每当发生这种情况时,是否应该制作“tmp”变量?
制作此扩展方法:public static int AddRangeEx<T>(this List<T> target, IEnumerable<T> items) { int result = items.Count(); if( result > 0 ) target.AddRange(items); return result; }
然后你就可以编写这样的代码了:
if(myList.AddRangeEx(getfiles(path)) > 0) { doSomething(); }
或者,如果您担心额外的Count()调用的副作用(即使只是性能副作用,但有很多方法可以获得只能运行一次的IEnumerable),您可以通过这种方式构建扩展方法:
public static int AddRangeEx<T>(this List<T> target, IEnumerable<T> items) { int result = 0; foreach (T item in items) { target.Add(item); result++; } return result; }
这与AddRange()和Count()已经在做的事情并没有什么不同.
作为奖励,您可以重载扩展方法,以提高已知计数的类型的性能:
public static int AddRangeEx<T>(this List<T> target, T[] items) { if (items.Length > 0) target.AddRange(items); return items.Length; }
令我感到难过的是,内置的AddRange()方法还没有为我们做到这一点.