在哪里练习 Lambda 函数? [关闭]
Posted
技术标签:
【中文标题】在哪里练习 Lambda 函数? [关闭]【英文标题】:Where to practice Lambda function? [closed] 【发布时间】:2010-09-19 15:29:14 【问题描述】:我目前正在尝试学习 C#3.0 的所有新功能。我找到了一个很好的 sample to practice LINQ 集合,但我找不到 Lambda 的类似内容。
你有我可以练习 Lambda 函数的地方吗?
更新
LINQpad 非常适合学习 Linq(感谢建议的人)并在某些表达式中使用一点 Lambda。但是对于 Lambda 的更具体的练习,我会很感兴趣。
【问题讨论】:
【参考方案1】:目前我发现的最好的是link。这是一个可以练习的测验,但我想要更多的 Lambda 和更少的 LINQ。
【讨论】:
【参考方案2】:Lambdas 就是这样一种东西,一旦你开始思考,你就会“明白”它。如果您当前正在使用委托,则可以将其替换为 lambda。此外,System.Action<...>
、System.Func<...>
和 System.Predicate<...>
的添加也是不错的快捷方式。不过,一些显示语法的示例会有所帮助(警告:它们是空洞的,但我想说明如何交换函数):
public static void Main()
// ToString is shown below for clarification
Func<int,string,string> intAndString = (x, y) => x.ToString() + y.ToString();
Func<bool, float, string> boolAndFloat = (x, y) => x.ToString() + y.ToString();
// with declared
Combine(13, "dog", intAndString);
Combine(true, 37.893f, boolAndFloat);
// inline
Combine("a string", " with another", (s1, s2) => s1 + s2);
// and multiline - note inclusion of return
Combine(new[] 1, 2, 3 , new[] 6, 7, 8 ,
(arr1, arr2) =>
var ret = "";
foreach (var i in arr1)
ret += i.ToString();
foreach (var n in arr2)
ret += n.ToString();
return ret;
);
// addition
PerformOperation(2, 2, (x, y) => 2 + 2);
// sum, multi-line
PerformOperation(new[] 1, 2, 3 , new[] 12, 13, 14 ,
(arr1, arr2) =>
var ret = 0;
foreach (var i in arr1)
ret += i;
foreach (var i in arr2)
ret += i;
return ret;
);
Console.ReadLine();
public static void Combine<TOne, TTwo>(TOne one, TTwo two, Func<TOne, TTwo, string> vd)
Console.WriteLine("Appended: " + vd(one, two));
public static void PerformOperation<T,TResult>(T one, T two, Func<T, T, TResult> func)
Console.WriteLine("0 operation 1 is 2.", one, two, func(one,two));
最让我感到困惑的是快捷语法,例如,当使用 System.Action 只执行不带参数的委托时:
var a = new Action(() => Console.WriteLine("Yay!"));
或者你可以这样做:
Action a = () => Console.WriteLine("Yay");
当您有一个带有一个参数的Action
、Func
或Predicate
时,您可以省略括号:
var f = new Func<int, bool>(anInt => anInt > 0);
或:
// note: no var here, explicit declaration
Func<int,bool> f = anInt => anInt > 0;
代替:
Func<int,bool> f = (anInt) => anInt > 0;
或者走极端:
Func<int,bool> f = (anInt) =>
return anInt > 0;
如上所示,单行 lambdas 不需要 return 语句,但多行 Func
lambdas 需要。
我认为您会发现学习如何使用 lambda 的最佳方法是大量使用集合并将 System.Linq 包含在您的 using 命名空间中 - 您会看到大量的集合扩展方法以及其中大多数方法让你锻炼你对 lambdas 的了解。
【讨论】:
【参考方案3】:LINQPad是学习LINQ的好工具
【讨论】:
令人印象深刻的软件,加上一些 Intelicense 就完美了。 但问题更多的是 Lambda 而不是 LINQ。以上是关于在哪里练习 Lambda 函数? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章