與 ref struct
型別相關聯的錯誤和警告
- CS8343:
ref structs
無法實作介面 - CS8344:
foreach
陳述式無法在非同步的列舉程式或迭代器方法上運作,因為型別是ref struct
或是允許ref struct
的型別參數。 - CS8345:欄位或自動實作屬性不可為型別,除非它是
ref struct
的執行個體成員。 - CS9048:
scoped
修飾元只能用於 refs 和ref struct
值。 - CS9050:A
ref
欄位無法參考ref struct
。 - CS9059:ref 欄位只能在 ref struct 中宣告。
- CS9241:已指定 'ref struct'。
- CS9242:'allows' 條件約束子句必須是最後一個指定的條件約束。
- CS9243:無法允許其他條件約束已知型別參數的 ref struct 成為類別。
- CS9244:型別可能不是
ref struct
或允許 ref struct 的型別參數,以便在泛型型別或方法中使用它作為參數。 - CS9245:型別無法實作
ref struct
型別的介面成員。 - CS9246:在允許 ref struct 的型別參數上無法存取非虛擬執行個體介面成員。
- CS9247:foreach 陳述式無法在型別的列舉程式上運作,因為它是允許 ref struct 的型別參數,而且在編譯時不確定要實作
IDisposable
。 - CS9267: 反覆運算器的元素類型可能不是 ref 結構或允許 ref 結構的類型參數
ref 安全違規
- CS8345:欄位或自動實作屬性不可為型別,除非它是
ref struct
的執行個體成員。 - CS9048:
scoped
修飾元只能用於 refs 和ref struct
值。 - CS9050:
ref
欄位無法參考ref struct
。 - CS9059:
ref
欄位只能在ref struct
中宣告。
ref struct
型別可以包含 ref
欄位。 其他型別不是允許的 ref
欄位。 編譯器會對宣告強制執行限制並使用 ref struct
型別,以在任何 ref struct
型別的執行個體上強制執行 ref 安全規則:
- 只有
ref struct
類型可以包含自動實作ref
的屬性。 - 只有
ref struct
型別或ref
變數才能有scoped
修飾元。 ref
欄位只能在ref struct
型別中宣告。ref
欄位無法參考ref struct
型別/
違反上述任何規則會產生其中一個列出的錯誤。 如果您打算使用該語言功能,請將型別轉換成 ref struct
。 否則,移除不允許的建構。
ref struct 介面實作
- CS8343:
ref structs
無法實作介面 - CS8344:
foreach
陳述式無法在非同步的列舉程式或迭代器方法上運作,因為型別是ref struct
或是允許ref struct
的型別參數。 - CS9241:已指定 'ref struct'。
- CS9242:'allows' 條件約束子句必須是最後一個指定的條件約束。
- CS9243:無法允許其他條件約束已知型別參數的 ref struct 成為類別。
- CS9244:型別可能不是
ref struct
或允許 ref struct 的型別參數,以便在泛型型別或方法中使用它作為參數。 - CS9245:型別無法實作
ref struct
型別的介面成員。 - CS9246:在允許 ref struct 的型別參數上無法存取非虛擬執行個體介面成員。
- CS9247:foreach 陳述式無法在型別的列舉程式上運作,因為它是允許 ref struct 的型別參數,而且在編譯時不確定要實作
IDisposable
。 - CS9267: 反覆運算器的元素類型可能不是 ref 結構或允許 ref 結構的類型參數
在 C# 13 之前,ref struct
型別無法實作介面;編譯器會產生 CS8343。 從 C# 13 開始,ref struct
型別可以實作介面,受限於下列規則:
ref struct
無法轉換成它所實作之介面的執行個體。 參數若為介面型別,當您使用ref struct
型別作為引數時,此限制會包括隱含轉換。 轉換會導致 Boxing 轉換,這違反了 ref 安全。- 實作介面的
ref struct
必須實作所有介面成員。ref struct
必須實作介面包含預設實作的成員。
從 C# 13 開始,唯有泛型型別參數具有 allows ref struct
反條件約束,ref struct
才能作為泛型型別參數的型別引數。 當您使用 allows ref struct
反條件約束時,必須遵循下列規則:
ref struct
作為型別引數使用,型別參數「必須」具有allows ref struct
反條件約束。-allows ref struct
反條件約束必須是該參數的最後一個where
子句- 使用型別參數必須遵循 ref 安全規則的執行個體。
ref struct
或可以是ref struct
型別的型別自變數不能當做反覆運算器方法的元素類型使用。