與方法參數的 params
修飾元相關的錯誤和警告
lock
陳述式和執行緒同步有一些相關錯誤:
- CS0225:params 參數必須是單一維度陣列或具有有效的集合型別
- CS0231:params 參數必須是正式參數清單中的最後一個參數。
- CS0466:'method1' 不應具有 params 參數,因為 'method2' 沒有此參數
- CS0674:請勿使用
System.ParamArrayAttribute
或System.ParamArrayAttribute
/System.Runtime.CompilerServices.ParamCollectionAttribute
。請改用params
關鍵字。 - CS0758:兩個部分方法宣告都必須使用
params
參數,或兩者都不使用params
參數 - CS1104:擴充方法中,參數陣列不能和
this
修飾元一起使用。 - CS1611:params 參數不可宣告為 in
ref
或out
- CS1670:
params
在此內容中無效 - CS1751:無法指定參數陣列的預設值。
- CS9218:無法從使用方式推斷方法的型別引數,因為使用了動態型別的引數,而且該方法具有非陣列 params 集合參數。請嘗試明確指定型別引數。
- CS9223:建立 params 集合會導致建構函式的無限叫用鏈結。
- CS9224:方法必須比 params 集合的成員更明顯。
- CS9225:建構函式會保留必要的成員未初始化。
- CS9227:型別不包含適當執行個體
Add
方法的定義。 - CS9228:非陣列 params 集合型別必須具有可使用無引數呼叫的適用建構函式。
方法宣告規則
下列錯誤表示在該內容中不允許 params
修飾元時對參數使用 params
修飾元:
- CS0231:params 參數必須是正式參數清單中的最後一個參數。
- CS1104:擴充方法中,參數陣列不能和
this
修飾元一起使用。 - CS1611:params 參數不可宣告為 in
ref
或out
- CS1670:
params
在此內容中無效 - CS1751:無法指定參數陣列的預設值。
編譯器會對在方法參數上使用 params
修飾元時強制執行下列規則:
- 只有正式參數清單中的最後一個參數才可使用
params
修飾元。 這包括具有預設值的任何參數。 - 使用
params
修飾元時,您無法包括參數的預設引數。 params
修飾元無法套用至參考參數。 參考參數是具有in
、ref readonly
、ref
或out
修飾元的參考參數。- 擴充方法中,
params
修飾元無法與this
修飾元合併。 params
修飾元無法用於多載運算子。
在 C# 12 之前的版本中,params
修飾元無法用於匿名方法或 Lambda 運算式的參數。
參數和引數型別規則
下列錯誤表示和 params
搭配使用的參數型別無效:
- CS9218:無法從使用方式推斷方法的型別引數,因為使用了動態型別的引數,而且該方法具有非陣列 params 集合參數。請嘗試明確指定型別引數。
- CS0225:params 參數必須是單一維度陣列或具有有效的集合型別
- CS9227:型別不包含適當執行個體
Add
方法的定義。 - CS9228:非陣列 params 集合型別必須具有可使用無引數呼叫的適用建構函式。
在 C# 13 之前的版本中,只有一維陣列才可使用 params
修飾元。 沒有其他有效型別。
從 C# 13 開始,可以使用任何有效的集合型別。 不過,仍有一些限制。 集合型別必須遵循與集合運算式的目標相同的規則。
其他 params 錯誤
下列錯誤表示使用 params
修飾元的其他問題:
- CS0466:'method1' 不應具有 params 參數,因為 'method2' 沒有此參數
- CS0674:請勿使用
System.ParamArrayAttribute
或System.Runtime.CompilerServices.ParamCollectionAttribute
。請改用params
關鍵字。 - CS0758:兩個部分方法宣告都必須使用
params
參數,或兩者都不使用params
參數 - CS9223:建立 params 集合會導致建構函式的無限叫用鏈結。
- CS9224:方法必須比 params 集合的成員更明顯。
- CS9225:建構函式會保留必要的成員未初始化。
只有在介面成員具有 params
修飾元時,實作介面的方法才必須包括 params
修飾元。 同樣地,partial
方法的兩個宣告都必須包括 params
修飾元,或者兩個都不包括 params
修飾元。
您必須使用 params
修飾元。 您無法套用對等屬性,包括 System.ParamArrayAttribute 或 System.Runtime.CompilerServices.ParamCollectionAttribute。
當產生建立集合型別的程式碼無效時,編譯器會在上述清單中產生最後三個錯誤的其中一個:
- 當發出建立集合的程式碼也包含相同型別的 params 集合時,編譯器會發出 CS9223。 一般而言,
Add
方法會採用相同型別的params
集合。 - 當集合型別的
Create
方法比採用集合型別params
參數的方法更難以存取時,編譯器會發出 CS9224。 - 當集合型別具有必要成員,且無參數建構函式未初始化該成員且具有無參數建構函式的 System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute 時,編譯器會發出 CS9225。