在C#中,params、ref 和 out 是方法聲明中用于修飾參數的關鍵字,它們各自有不同的用途和語義。以下是它們的詳細說明和用法:
1、 params 關鍵字
意義
params 允許方法接受可變數量的參數,這些參數會被編譯為一個數組。適用于參數數量不確定的場景。
用法
- 必須作為方法的最后一個參數。
- 類型必須是一維數組(如 int[]、string[] 等)。
- 調用時可以直接傳遞逗號分隔的參數列表,或直接傳遞數組。
示例
void PrintNumbers(params int[] numbers)
{foreach (var num in numbers){Console.WriteLine(num);}
}// 調用方式
PrintNumbers(1, 2, 3); // 輸出:1, 2, 3
PrintNumbers(new int[] {4, 5}); // 輸出:4, 5
注意事項
- 一個方法只能有一個 params 參數。
- 不能與 ref 或 out 一起使用。
2、ref 關鍵字
意義
ref 表示參數是按引用傳遞的,方法內對參數的修改會影響調用方的變量。適用于需要方法內外共享同一存儲位置的場景。
用法
調用前必須初始化變量(因為引用不能為 null)。
方法聲明和調用時均需使用 ref。
示例
void ModifyValue(ref int x)
{x = x + 10; // 修改會影響調用方的變量
}int num = 5;
ModifyValue(ref num);
Console.WriteLine(num); // 輸出:15
注意事項
- 常用于需要返回多個值的場景(結合 out)。
- 不能用于 params 參數。
3、out 關鍵字
意義
out 表示參數是按引用傳遞的,但調用前無需初始化(方法必須為其賦值)。適用于需要方法返回額外結果的場景。
用法
- 方法聲明和調用時均需使用 out。
- 方法內部必須對 out 參數賦值(否則編譯錯誤)。
示例
void TryParseNumber(string input, out int result)
{if (int.TryParse(input, out result)){Console.WriteLine("解析成功");}else{result = 0; // 必須賦值}
}int value;
TryParseNumber("123", out value);
Console.WriteLine(value); // 輸出:123
C# 7.0+ 的簡化語法
從 C# 7.0 開始,可以在調用時直接聲明 out 變量:
TryParseNumber("456", out int result);
Console.WriteLine(result); // 輸出:456
注意事項
- 常用于 TryParse、Divide 等需要返回狀態或額外結果的場景。
- 不能用于 params 參數。
通過合理使用這些關鍵字,可以更靈活地處理方法參數,滿足不同場景的需求。