共用方式為


與方法參數的 params 修飾元相關的錯誤和警告

lock 陳述式和執行緒同步有一些相關錯誤

  • CS0225params 參數必須是單一維度陣列或具有有效的集合型別
  • CS0231params 參數必須是正式參數清單中的最後一個參數。
  • CS0466'method1' 不應具有 params 參數,因為 'method2' 沒有此參數
  • CS0674請勿使用 System.ParamArrayAttributeSystem.ParamArrayAttribute/System.Runtime.CompilerServices.ParamCollectionAttribute。請改用 params 關鍵字。
  • CS0758兩個部分方法宣告都必須使用 params 參數,或兩者都不使用 params 參數
  • CS1104擴充方法中,參數陣列不能和 this 修飾元一起使用。
  • CS1611params 參數不可宣告為 in refout
  • CS1670params 在此內容中無效
  • CS1751無法指定參數陣列的預設值。
  • CS9218無法從使用方式推斷方法的型別引數,因為使用了動態型別的引數,而且該方法具有非陣列 params 集合參數。請嘗試明確指定型別引數。
  • CS9223建立 params 集合會導致建構函式的無限叫用鏈結。
  • CS9224方法必須比 params 集合的成員更明顯。
  • CS9225建構函式會保留必要的成員未初始化。
  • CS9227型別不包含適當執行個體 Add 方法的定義。
  • CS9228非陣列 params 集合型別必須具有可使用無引數呼叫的適用建構函式。

方法宣告規則

下列錯誤表示在該內容中不允許 params 修飾元時對參數使用 params 修飾元:

  • CS0231params 參數必須是正式參數清單中的最後一個參數。
  • CS1104擴充方法中,參數陣列不能和 this 修飾元一起使用。
  • CS1611params 參數不可宣告為 in refout
  • CS1670params 在此內容中無效
  • CS1751無法指定參數陣列的預設值。

編譯器會對在方法參數上使用 params 修飾元時強制執行下列規則:

  • 只有正式參數清單中的最後一個參數才可使用 params 修飾元。 這包括具有預設值的任何參數。
  • 使用 params 修飾元時,您無法包括參數的預設引數。
  • params 修飾元無法套用至參考參數。 參考參數是具有 inref readonlyrefout 修飾元的參考參數。
  • 擴充方法中,params 修飾元無法與 this 修飾元合併。
  • params 修飾元無法用於多載運算子。

在 C# 12 之前的版本中,params 修飾元無法用於匿名方法或 Lambda 運算式的參數。

參數和引數型別規則

下列錯誤表示和 params 搭配使用的參數型別無效:

  • CS9218無法從使用方式推斷方法的型別引數,因為使用了動態型別的引數,而且該方法具有非陣列 params 集合參數。請嘗試明確指定型別引數。
  • CS0225params 參數必須是單一維度陣列或具有有效的集合型別
  • CS9227型別不包含適當執行個體 Add 方法的定義。
  • CS9228非陣列 params 集合型別必須具有可使用無引數呼叫的適用建構函式。

在 C# 13 之前的版本中,只有一維陣列才可使用 params 修飾元。 沒有其他有效型別。

從 C# 13 開始,可以使用任何有效的集合型別。 不過,仍有一些限制。 集合型別必須遵循與集合運算式的目標相同的規則。

其他 params 錯誤

下列錯誤表示使用 params 修飾元的其他問題:

  • CS0466'method1' 不應具有 params 參數,因為 'method2' 沒有此參數
  • CS0674請勿使用 System.ParamArrayAttributeSystem.Runtime.CompilerServices.ParamCollectionAttribute。請改用 params 關鍵字。
  • CS0758兩個部分方法宣告都必須使用 params 參數,或兩者都不使用 params 參數
  • CS9223建立 params 集合會導致建構函式的無限叫用鏈結。
  • CS9224方法必須比 params 集合的成員更明顯。
  • CS9225建構函式會保留必要的成員未初始化。

只有在介面成員具有 params 修飾元時,實作介面的方法才必須包括 params 修飾元。 同樣地,partial 方法的兩個宣告都必須包括 params 修飾元,或者兩個都不包括 params 修飾元。

您必須使用 params 修飾元。 您無法套用對等屬性,包括 System.ParamArrayAttributeSystem.Runtime.CompilerServices.ParamCollectionAttribute

當產生建立集合型別的程式碼無效時,編譯器會在上述清單中產生最後三個錯誤的其中一個:

  • 當發出建立集合的程式碼也包含相同型別的 params 集合時,編譯器會發出 CS9223。 一般而言,Add 方法會採用相同型別的 params 集合。
  • 當集合型別的 Create 方法比採用集合型別 params 參數的方法更難以存取時,編譯器會發出 CS9224
  • 當集合型別具有必要成員,且無參數建構函式未初始化該成員且具有無參數建構函式的 System.Diagnostics.CodeAnalysis.SetsRequiredMembersAttribute 時,編譯器會發出 CS9225

另請參閱