检查项目是否存在于列表中并将值推入列表中—一口气

时间:2018-12-26 14:32:14

标签: c# linq

我要检查列表中是否存在该项目,如果存在,则将其推入值。

所有这些都是为了避免在列表上两次运行。

因为我做了这样的事情:

if (Params.Any(p => p.Name == "Phone"))
    Params.Where(p => p.Name == "Phone").First().Value = phoneValue

我在清单上两次出现。在any中是第一次,在where中是第二次。

实际上,我想一次完成以上两行。

有可能吗?

4 个答案:

答案 0 :(得分:4)

您可以按以下方式使用FirstOrDefault

var result = Params.FirstOrDefault(p => p.Name == "Phone"); 

然后检查该值是否不为null,然后设置属性:

if(result != null) result.Value = phoneValue;

这样,您不必在源代码上两次枚举。

答案 1 :(得分:2)

请尝试以下操作:

var parameter = Params.FirstOrDefault(p => p.Name == "Phone");
if (parameter != null) parameter.Value = phoneValue;

答案 2 :(得分:2)

传统的for / foreach循环在这里会更好,因为AnyWhere将不得不两次迭代该集合,这在性能方面可能不是您想要的。

所以做一个简单的foreach:

foreach(var item in Params) 
{
  if(item.Name == "phone")
  {
     item.Value = phoneValue;
     break;
  }
}

答案 3 :(得分:1)

另一种可行的解决方案是使用Extension Methods

public static class ParametersExtensions
{
    public static void SetValue(this List<Parameters> ListParameters, string name, string newValue)
    {   
        var parameter = ListParameters.FirstOrDefault(x => x.Name.Equals(name)); 
        if (parameter != null)
            parameter.Value = newValue;
    }
}

然后您可以按以下方式使用它:

Params.SetValue("Phone", phoneValue);