【问题标题】:how to remove from list using Lambda syntax如何使用 Lambda 语法从列表中删除
【发布时间】:2012-12-30 18:28:25
【问题描述】:

给定:

List<Name> names = new List<Name>(); //list full of names

public void RemoveName(string name) {
   List<Name> n = names.Where(x => x.UserName == name);;
   names.Remove(n);
}

执行删除的 Lambda 语法是什么?

如果该功能是否删除,我如何获得“成功”的指示?

【问题讨论】:

    标签: c# list lambda


    【解决方案1】:
    names.RemoveAll(x => x.UserName == name);
    

    请注意,lambda 语法 所做的只是提供一个Predicate&lt;T&gt;; lambda 语法与它最终做什么 与 lambda 完全无关。

    或者单场比赛(见 cmets):

    var found = names.Find(x => x.UserName == name);
    if(found != null) names.Remove(found);
    

    或:

    var index = names.FindIndex(x => x.UserName == name);
    if(index >= 0) names.RemoveAt(index);
    

    【讨论】:

    • 我只想删除一个名字,即作为参数发送
    • @darko 它只会删除那些匹配的;但是...我将为单个删除添加一个编辑...
    • 挑剔,但为了完整性;以上所有内容都会在列表中插入一个空值。如果有这种可能,您需要在 lambda 中进行空检查。
    • 如果函数没有删除,我如何获得“成功”的指示?
    • names.Find/names.Remove 方法比基于索引的方法慢,平均需要 1.5 次遍历列表而不是 1 次。最好将两者中的较快者放在首位并提到替代方案的放缓。在这种情况下,更快的方法没有缺点。
    【解决方案2】:
    var n = names.SingleOrDefault(x => x.UserName == name)
    if(n != null && n.UserName.length > 0)
    {
     names.Remove(n);
    }
    

    var n= names.Where(x => x.UserName == name).First();
    names.Remove(n)
    

    【讨论】:

    • 如果函数删除与否,我如何获得“成功”的指示?
    • names.Remove(n) Returns: //true 如果项目被成功移除;否则为假。如果在中找不到项目,此方法也 //返回 false
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2019-08-21
    • 1970-01-01
    • 2021-12-26
    • 2011-08-02
    相关资源
    最近更新 更多