在泛型List的ForEach()中使用lambda表达式中的条件运算符?

Jam*_*zor 10 c# lambda conditional-operator .net-3.5

是不是允许在ForEach中的lambda表达式中有一个条件运算符?

List<string> items = new List<string>{"Item 1", "Item 2", "Item I Care About"};

string whatICareAbout = "";

// doesn't compile :(
items.ForEach(item => item.Contains("I Care About") ? 
whatICareAbout += item + "," : whatICareAbout += "");
Run Code Online (Sandbox Code Playgroud)

编译错误 - >"只能将赋值,调用,递增,递减和新对象表达式用作语句"

尝试使用普通if也不起作用:

// :(
items.ForEach(item => if (item.Contains("I Care About")) {whatICareAbout += item + ", ";}
Run Code Online (Sandbox Code Playgroud)

只是不可能?

SLa*_*aks 30

您正在使用较短形式的lambda表达式,它只允许单个表达式.
你需要长形式,它允许多个语句.

例如:

items.ForEach(item => {
    if (item.Contains("I Care About")) 
        whatICareAbout += item + ", ";
});
Run Code Online (Sandbox Code Playgroud)


Mat*_*kon 5

你想要实现什么?您是否尝试形成一串逗号分隔的项目,其中包含特定值?在linq中,您可以使用以下方法实现此目的:

 List<string> items = new List<string> { "Item 1", "Item 2", "Item I Care About", "Item I Care About", "Item I Care About" }; 
 string whatICareAbout = items.Where(x => x.Contains("I Care About"))
                              .Aggregate( (y, z) => y + ", " + z);
Run Code Online (Sandbox Code Playgroud)

这个输出是"我关心的项目,我关心的项目,我关心的项目".

注意:聚合是确保没有尾随","的好方法.