[英]How do I create a VS C# project for a lamda function to handle a Amazon IoT developer button event?
[英]C# Lamda Expression and Local Function Uderstanding
我有我目前正在使用的这个 C# 代码片段。
async Task<string> lol() => "sample string";
var val = await lol();
Console.WriteLine(val);
有人请描述
我无法理解这是本地 function
因此,您熟悉方法 - 您可能已经编写了数百个方法:
public string GreetMe(DateTime d){
if(d.Hour < 12)
return "good morning";
else
return "good afternoon";
}
您可能熟悉表达式体方法; 它们是解析为值的单行代码。 他们让我们跳过写return
和{ }
public string GreetMe(DateTime d) => d.Hour < 12 ? "good morning" : "good afternoon";
您可能熟悉 lambda:
listOfTimes.Select(t => t.Hour < 12 ? "good morning" : "good afternoon");
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
lambda's like a mini method, just the logic; the compiler
supplies all the other fluff about types and return keywords
您可能不知道您可以将 lambda (或普通方法,甚至)存储在变量中,然后可以将其传递到将运行它的某个地方。 您可能还会看到“委托”一词用于指代包含方法的变量:
Func<DateTime, string> deleg = t => t.Hour < 12 ? "good morning" : "good afternoon";
listOfTimes.Select(deleg);
或者你可以自己运行它:
string greeting = deleg(DateTime.Now);
局部函数有点像 lambda,因为它们体现了某种方法的逻辑,但它们并不表现为可以传递的东西——这意味着它们在某些情况下的性能略高一些,因为它们不代表任何需要被垃圾收集的东西
public void SomeMethod(){
//using an expression body
string greetMe1(DateTime d) => DateTime.Now.Hour < 12 ? "good morning" : "good afternoon";
//using a normal body
string greetMe2(DateTime d) {
if(d.Hour < 12)
return "good morning";
else
return "good afternoon";
}
//run the local function, and capture its output
var greeting = greetMe1(DateTime.Now);
}
简而言之,本地函数是另一种创建可执行代码单元的方法,您可能希望经常调用它,作为更大工作项的一部分。 您可能正在寻找一种重用代码的方法,或者使用大量复杂的嵌套代码来降低一些大型 LINQ 语句的视觉复杂性。 它们就像其他方法一样,但仅限于定义它们的方法。 他们还可以做一些委托不能做的事情,比如调用自己或使用yield
,你可能要小心你声明它们的地方,因为你可以在方法的末尾声明它们并在它们“之前”使用它们重新声明(视觉上),这与典型的 C# 流程略有不同。
async Task<string> lol() => "sample string";
这一行是任务,它的名字是lol,它返回
var val = await lol();
在这种情况下,这一行获取lol()
的结果“示例字符串”并将其分配给值 val
它通过lol()
而不是lol
调用的原因是这定义了它是一个任务/函数,并且还允许您将变量发送到任务/函数
一个例子是lol("New String")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.