更新属性或创建新元素(如果它不存在)Lambda c#

afr*_*and 4 .net c# lambda

我有一个大的List <> of Name/Value对,需要能够找到此列表中是否存在特定的Name ...如果是,则更新该Value,如果不是则创建一个新的Name/Value对并​​将其附加到我的列表.

Lambda语法是做什么的?

我曾尝试使用.Where .DefaultIfEmpty,但它只返回一个空对象,但不会将其附加到我原来的'myList'

myList.Where(x => x.Name == 'some name').DefaultIfEmpty(new myobj(){ Name = 'some name').First().Value = 'some value';
Run Code Online (Sandbox Code Playgroud)

我必须这四个多个名称,所以如果我有一个简单的语法,将使它伟大=)

Ser*_*kiy 5

您可以使用此扩展方法:

public static void UpdateOrAdd(this List<myobj> source, 
     string name, object value)
{
    var obj = source.FirstOrDefault(x => x.Name == name);
    if (obj == null)
    {
        obj = new myobj { Name = name };
        source.Add(obj);
    }

    obj.Value = value;
}
Run Code Online (Sandbox Code Playgroud)

用法:

myList.UpdateOrAdd("some name", "some value");
Run Code Online (Sandbox Code Playgroud)

但是考虑使用字典,就像@Sam建议的那样.