我有這個 C# 代碼片段,我目前正在使用它。
async Task<string> lol() => "sample string";
var val = await lol();
Console.WriteLine(val);
有人請描述
- 第 2 行的含義是什么
uj5u.com熱心網友回復:
我無法理解這是一個本地函式
所以,您很熟悉方法——您可能已經撰寫了數百個方法:
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# 流程略有不同。
uj5u.com熱心網友回復:
async Task<string> lol() => "sample string";
這一行是任務,它的名字是 lol,它回傳
var val = await lol();
lol()在這種情況下,這一行采用“示例字串”的結果并將其分配給值 val
它被呼叫的原因是通過lol()而不是lol這定義它是一個任務/函式,并且還允許您將變數發送到任務/函式
這方面的一個例子是 lol("New String")
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/391162.html
