加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在检查时将功能结果添加到列表中

发布时间:2020-12-16 01:27:57 所属栏目:百科 来源:网络整理
导读:正如我经常这样做,我想知道是否有一个简洁的方法来跳过使用变量.我有一个函数返回一个未知长度的List.我想将结果添加到另一个列表中,并且还知道我是否返回了一个空列表.我可以将函数结果保存在变量中,看看它是否为空,否则将其添加到列表中.我正在考虑是否可
正如我经常这样做,我想知道是否有一个简洁的方法来跳过使用变量.我有一个函数返回一个未知长度的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()方法还没有为我们做到这一点.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读