?C# 就像約會一樣,既令人沮喪又充滿回報。在我作為一名 C# 開發人員的經歷中,我被高水平的程序員所包圍,他們推動我認識到在這個行業中取得成功需要付出多大的努力。
?本文將介紹 3 個高級的、必須掌握的 C# 特性,這些特性將讓您成為一個編程專家,并將您的面向對象編程和 C# 技能提升到新的高度。

1、LINQ(語言集成查詢)
簡單來說,這是一組工具,可以方便地操作可枚舉類型(例如 List、Dictionary 等)的數據。這個工具包括基于預設的 predicates/requirements 的方法來修改變量:
using System;
using System.Collections.Generic;
using Systems.Linq;
public class LinqMethodExample
{
public static void Main(string[] args)
{
// 創建一個整數列表。
var listOfNumbers = new List<int> { 10, 5, 20, 15, 30, 25, 33, 66 };
// 執行各種LINQ方法。
var result = listOfNumbers
.Where(num => num % 5== 0) // 得到可被5整除的數字。
.Select(num => (int)Math.Pow(num, 2)) // 將每個數字平方。
.Skip(1) // 跳過第一個元素。
.Last(num => num % 2 == 0) // 得到最后一個偶數。
Console.WriteLine($"{result}");
// 樣例輸出:
// 900
}
}
還有其他方法,比如:
- OrderBy() -> 根據謂詞按升序對序列進行排序。
- GroupBy() -> 根據謂詞對元素進行分組。
- SelectMany() -> 扁平化嵌套列表(即從 List<List<int>> 提取 List<int>)。
- Join() -> 根據謂詞連接兩個序列。
- Zip() -> 將兩個序列組合成元組的單個序列。
- Distinct() -> 從序列中返回不同的元素。
這只是一個簡單的示例,展示了 LINQ 方法的強大之處。這些方法的可擴展性和應用取決于您作為一名工程師的決策。在 LINQ 庫中存在許多更多的方法。
2、異步編程
這是一種簡單的技術,允許程序在不阻塞主線程的情況下運行多個不同過程的任務。
與等待任務完成不同,異步任務允許其他任務同時繼續執行。這有助于提高應用程序的響應性和性能,通常可以使用 async 或 await 關鍵字來實現。下面的代碼以異步方式執行三個任務。也就是說,如果編譯此代碼,您將看到這三個任務將同時運行,并在不同的時間完成:
using System;
using System.Threading.Tasks;
public class AsyncProgramming
{
public static async Task RandomDelayAsync(int workId)
{
// 為此給定任務設置一個隨機延遲值(1s-5s)。
var rand = new Random();
var delay = rand.Next(1000, 5000);
await Task.Delay(delay);
// 打印消息,以便用戶知道此任務何時完成。
Console.WriteLine($"Work {workId} completed in {delay}ms.");
}
public static async Task Main()
{
// 創建一個由3個任務組成的數組以異步執行。
var tasks = new Task[3];
for (var idx=0; idx < tasks.Length; idx++)
{
tasks[idx] = RandomDelayAsync(idx);
}
// 等待所有任務完成。
await Task.WhenAll(tasks);
Console.WriteLine("All tasks completed.");
// 示例輸出:
// Work 2 completed in 1014ms.
// Work 0 completed in 2329ms.
// Work 1 completed in 4392ms.
// All tasks completed.
}
}

3、委托和事件
簡單來說,這些工具提供了一種定義回調方法簽名的方式,并提供了一種將事件處理程序附加/分離到事件的方式。
換句話說,委托就像你給別人的電話號碼,事件就像通話后出現的語音郵件。當事件發生時,它是由電話號碼通話引起的,代碼會響應并做出相應的操作,比如觸發一個語音郵件:
using System;
public class DelegateAndEventExample
{
// 聲明表示方法的委托類型
// 不接受任何參數并返回void。
public delegate void PhoneNumber();
public class Class
{
// 聲明類型為PhoneNumber的事件。
public event PhoneNumber VoiceMail;
// 定義引發事件的方法。
public void CallPhoneNumber()
{
Console.WriteLine("Calling the phone number...");
MyEvent?.Invoke();
}
}
public static void Main()
{
var instance = new MyClass();
// 使用lambda表達式將方法附加到語音郵件事件。
instance.VoiceMail += () => Console.WriteLine("Event handler called!");
// 調用CallPhoneNumber方法,該方法會引發語音郵件事件。
instance.CallPhoneNumber();
// 示例輸出:
// Calling the phone number...
// Event handler called!
}
}
總之,掌握 LINQ、異步編程和委托/事件對于經驗豐富的 C# 開發人員來說是必不可少的,他們的目標是提高編碼技能。通過利用這些強大的功能,開發人員可以編寫更高效、簡潔和靈活的代碼,輕松處理復雜操作。因此,如果您是一個 C# 專家或渴望成為一個專家,一定要將這些功能添加到您的工具箱中,并將您的編碼水平提升到更高的水平。