相关疑难解决方法(0)

LINQ相当于foren for IEnumerable <T>

我想在LINQ中做相同的以下内容,但我无法弄清楚如何:

IEnumerable<Item> items = GetItems();
items.ForEach(i => i.DoStuff());
Run Code Online (Sandbox Code Playgroud)

什么是真正的语法?

linq ienumerable foreach

694
推荐指数
12
解决办法
46万
查看次数

为通用c#集合中的每个值调用一个函数

我在List集合中有一组整数值.我想为集合中的每个值调用一个函数,其中一个函数的参数是一个集合值.如果没有在foreach循环中执行此操作...有没有办法用lambda/linq表达式完成此操作?

像...这样的东西myList.Where(p => myFunc(p.Value));

提前谢谢,-s

c# linq generics lambda

51
推荐指数
6
解决办法
8万
查看次数

对Enumerable <T>中的所有元素执行特定操作

我有一个Enumerable<T>并且正在寻找一种方法,允许我为每个元素执行一个动作,有点像Select然后是副作用.就像是:

string[] Names = ...;
Names.each(s => Console.Writeline(s));
Run Code Online (Sandbox Code Playgroud)

要么

Names.each(s => GenHTMLOutput(s));   
// (where GenHTMLOutput cannot for some reason receive the enumerable itself as a parameter)
Run Code Online (Sandbox Code Playgroud)

我试过了Select(s=> { Console.WriteLine(s); return s; }),但它没有打印任何东西.

linq enumerable c#-3.0

47
推荐指数
5
解决办法
4万
查看次数

用于将操作应用于不同数量的对象的C#语法

我想要做的是将lambda语法与"params"结合起来对一系列对象执行操作.

假设我想让一堆控件不可见.

经过一番摆弄后,我最终得到了一个扩展方法:

public static void On<T>(this Action<T> actionToCarryOut,params T[] listOfThings)
{
    foreach (var thing in listOfThings)
    {
        actionToCarryOut(thing);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个动作:

Action<Control> makeInvisible = c => c.Visible = false;
Run Code Online (Sandbox Code Playgroud)

然后调用它:

makeInvisible.On(control1,control2, control3,control4);
Run Code Online (Sandbox Code Playgroud)

这不是很好的语法 - 它感觉非常笨拙.

我可以在我的基类中创建一个方法"Apply":

protected void Apply<T>(Action<T> action, params T[] appliedTo)
{
    foreach (var item in appliedTo)
    {
        action(item);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后像这样调用它:

Apply<Control>(
    c => c.Visible = false,
    control1,
    control2,
    control3,);
Run Code Online (Sandbox Code Playgroud)

但这意味着在我需要的每个基类中重复该方法,并且我失去了类型推断的优势.

这样做有一种不那么笨拙的方式吗?

编辑:到目前为止我见过的最好的方法是流畅的方法,(通过一些调整)将允许我写:

Apply.Method((Control c) => c.Visible = false).To(
    control1, 
    control2, 
    control3, 
    control4};
Run Code Online (Sandbox Code Playgroud)

这是91个字符,而使用简单的"foreach"则为107个字符.这让我相信"foreach"可能实际上是最好的方法!

c#

13
推荐指数
2
解决办法
295
查看次数

LINQ - 更新where子句中的字段

我的对象层次结构如下:

class Detail
{
    public List<Row> Rows { get; set; }
}

class Row
{
    public List<Column> Columns { get; set; }
}

class Column
{
    public string Name { get; set; }
    public bool IsUpdated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想设置column.IsUpdated = true其中column.Name ="id".我正在尝试这个,它不起作用.

detail.Rows.ForEach(r => r.Columns.Where(c => c.Name.ToLower().Equals("id")).ToList<Column>().Select(c => c.IsUpdated = true));
Run Code Online (Sandbox Code Playgroud)

linq

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

linq ×4

c# ×2

c#-3.0 ×1

enumerable ×1

foreach ×1

generics ×1

ienumerable ×1

lambda ×1