C# Lambda

Lambda expression

於 C# 3.0 开始提供, 可以使用 lambda 运算式来建立匿名函数, 型式如下

运算式 lamdba
(参数) => 运算式 
例: (a, b) => a + b
陈述式 lambda
(参数) => { 一连串的陈述式 } 
例: 
(a, b) => 
{
  int c = a + b;
  Console.WriteLine($"a + b = {C}")
} 

任何 Lambda 运算式可转换成 Delegate(委派)型别, 如果 Lambda 运算式没有回传值, 可以转换成 Action 委派型别, 否则可转换成其中一个 Func 委派型别

Action<string> greet = name => 
{
  string greeting = $"Nice to meet you {name}";
  Console.WriteLine(greeting);
};
greet("Marlon");
Func<int, int> square = x => x * x;
Console.WriteLine(square(12));

运算树(expression tree)
运算式 lambda 也可以转换成运算式树

using System.Linq.Expressions
Expression<Func<int, int>> e = x => x * x;
Console.WriteLine(e);
// x => (x * x)

lambda expression 搭配 Linq 使用

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Collections.Generic;

int[] numbers = {5, 6, 3, 2, 1, 7, 8, 234, 54, 14, 653, 3, 4, 5, 6, 7};
List<int> oddNumbers = numbers.Where(n => n % 2 == 1).ToList();
Console.WriteLine(string.Join(", ", oddNumbers));

string[] catNames = {"Lucky", "Bella", "Luna", "Oreo", "Simba", "Toby", "Loki", "Oscar"};
double average = catNames.Average(cat => cat.Length);
double minCatName = catNames.Min(cat => cat.Length);
double maxCatName = catNames.Max(cat => cat.Length);
double sumCatName = catNames.Sum(cat => cat.Length);
Console.WriteLine(average);
Console.WriteLine(minCatName);
Console.WriteLine(maxCatName);
Console.WriteLine(sumCatName);

object[] mix = {1, "string", 'd', new List<int>() {1, 2, 3, 4}, new List<int>() {5, 2, 3, 4}, "dd", 's', "Hello Kitty", 1, 2, 3, 4};
var allIntegers = mix.OfType<int>().Where(i => i < 3);
Console.WriteLine(string.Join(", ", allIntegers));
var allIntList = mix.OfType<list<int>>().ToList();
for (int i = 0; i < allIntLists.Count; i++)
{
  Console.WriteLine($"Int Lists[{i}]: " + string.Join(", ", allIntList[i]));
}

<<:  Day 8:架设 Prometheus (0)

>>:  Day7 工业厂区的现场设备 IED、HMI

[第十二只羊] 迷雾森林舞会V twitter + devise登入

天亮了 昨晚是平安夜 关於迷雾森林故事 确认身份别恍神 8号:先评论一下午5号,感觉蛮好的整个人蛮放...

「Wordpress 外挂开发」代客下单最终章,观察经手人

加入 Autocomplete 原本是打算做email与公司的匹配,不过觉得在这个的逻辑上打转,基本...

DAY15 MongoDB Explain 效能分析工具

DAY15 MongoDB Explain 效能分析工具 针对资料库内的资料进行查询、新增、删修都需...

Day07 UIKit 06 - 在 Storyboard 上设计多页面

记得前面讲过,Storyboard 里面可以放置多个页面(ViewController),页面之间的...

06 | WordPress 段落区块 Paragraph Block

在撰写文章的时候,最常使用「标题区块 Heading Block」和「段落区块 Paragraph...