[英]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.