正如我经常这样做,我想知道是否有一个简洁的方法来跳过使用变量.我有一个函数返回一个未知长度的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()方法还没有为我们做到这一点.
