我要检查列表中是否存在该项目,如果存在,则将其推入值。
所有这些都是为了避免在列表上两次运行。
因为我做了这样的事情:
if (Params.Any(p => p.Name == "Phone"))
Params.Where(p => p.Name == "Phone").First().Value = phoneValue
我在清单上两次出现。在any
中是第一次,在where
中是第二次。
实际上,我想一次完成以上两行。
有可能吗?
答案 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循环在这里会更好,因为Any
和Where
将不得不两次迭代该集合,这在性能方面可能不是您想要的。
所以做一个简单的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);