C# 中Func 的用法小結
在 C# 中,F(xiàn)unc 是一個泛型委托類型,用于表示有返回值的方法,它是 .NET 框架提供的預定義委托,無需手動聲明即可直接使用。Func 的核心作用是封裝具有特定參數(shù)列表和返回值的方法,常用于 lambda 表達式、匿名方法或作為方法參數(shù)傳遞,使代碼更簡潔靈活。
一、基本定義與語法
Func 是泛型委托,定義格式為:
Func<參數(shù)類型1, 參數(shù)類型2, ..., 返回值類型>
特點
- 最少需要指定返回值類型(即至少有 1 個類型參數(shù),代表返回值)。
- 最多可以有 16 個輸入?yún)?shù) + 1 個返回值類型(共 17 個類型參數(shù))。
- 無參數(shù)但有返回值時,使用 Func<返回值類型>。
二、常用形式與示例
- 無參數(shù),有返回值(Func)
// 定義:無參數(shù),返回string
Func<string> getTime = () => DateTime.Now.ToString("HH:mm:ss");
// 調用
string currentTime = getTime(); // 結果:當前時間字符串,如 "15:30:20"
- 1 個參數(shù),有返回值(Func<T, TResult>)
// 定義:輸入int,返回其平方(int) Func<int, int> square = x => x * x; // 調用 int result = square(5); // 結果:25
- 2 個參數(shù),有返回值(Func<T1, T2, TResult>)
// 定義:輸入兩個string,返回拼接結果
Func<string, string, string> combine = (a, b) => $"{a}-";
// 調用
string str = combine("Hello", "World"); // 結果:"Hello-World"
- 多參數(shù)(如 3 個參數(shù))
// 定義:輸入三個int,返回它們的和 Func<int, int, int, int> sum = (a, b, c) => a + b + c; // 調用 int total = sum(1, 2, 3); // 結果:6
三、Func 的典型用法
- 作為方法參數(shù)(傳遞邏輯)
將 Func 作為參數(shù)傳入方法,使方法可以動態(tài)執(zhí)行不同邏輯,類似 “回調函數(shù)”。
// 定義一個使用Func的方法:對數(shù)組中的每個元素執(zhí)行func邏輯并返回新數(shù)組
int[] ProcessArray(int[] array, Func<int, int> func)
{
int[] result = new int[array.Length];
for (int i = 0; i < array.Length; i++)
{
result[i] = func(array[i]); // 執(zhí)行傳入的邏輯
}
return result;
}
// 使用:傳入不同的Func實現(xiàn)不同功能
int[] numbers = { 1, 2, 3, 4 };
int[] squares = ProcessArray(numbers, x => x * x); // 求平方:[1,4,9,16]
int[] doubles = ProcessArray(numbers, x => x * 2); // 翻倍:[2,4,6,8]
- 配合 LINQ 查詢
LINQ 中大量使用 Func 作為參數(shù),例如 Where、Select 等方法:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
// Where方法接收Func<int, bool>:篩選出偶數(shù)
var evenNumbers = numbers.Where(n => n % 2 == 0); // 結果:[2,4]
// Select方法接收Func<int, string>:轉換為字符串
var numberStrings = numbers.Select(n => $"數(shù)字:{n}"); // 結果:["數(shù)字:1", "數(shù)字:2", ...]
- 簡化復雜邏輯的封裝
當需要多次復用某段邏輯時,用 Func 封裝可減少代碼冗余:
// 封裝“字符串處理”邏輯
Func<string, string, string> processString = (input, suffix) =>
{
if (string.IsNullOrEmpty(input))
return "默認值";
return input.Trim() + suffix;
};
// 多次復用
string res1 = processString(" test ", "123"); // 結果:"test123"
string res2 = processString(null, "456"); // 結果:"默認值456"
四、Func 與 Action 的區(qū)別
1.Func:有返回值(至少需要指定返回值類型)。
2. Action:無返回值(專注于執(zhí)行操作,參數(shù)列表與 Func 類似,但無返回值類型)。
示例對比:
// Func(有返回值) Func<int, int> addOne = x => x + 1; // Action(無返回值) Action<int> printNumber = x => Console.WriteLine(x);
五、總結
Func 是 C# 中處理 “有返回值的方法封裝” 的強大工具,其核心優(yōu)勢在于:
- 簡化代碼:無需手動聲明委托類型,直接使用預定義的 Func。
- 靈活傳遞邏輯:作為參數(shù)傳遞時,可動態(tài)切換方法行為(如 LINQ、回調函數(shù))。
- 配合 lambda 表達式:使代碼更簡潔,可讀性更高。
掌握 Func 的用法,能極大提升 C# 代碼的靈活性和可維護性,尤其在 LINQ、委托回調等場景中必不可少。
到此這篇關于C# 中Func 的用法小結的文章就介紹到這了,更多相關C# Func用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C#中ToString數(shù)據(jù)類型格式大全(千分符)
這篇文章主要介紹了C#中ToString數(shù)據(jù)類型格式大全 千分符,需要的朋友可以參考下2017-02-02

