C# 方法組重載解析歧義
問題:
在 C# 中使用帶有重載委託方法的方法群組語法可能會觸發「不明確的呼叫」編譯器錯誤,即使匿名方法成功呼叫相同的重載也是如此。
為什麼會發生:
在重載決策期間將方法組轉換為多個相容的委託類型時,C# 編譯器缺乏明確的「更好」規則。 例如,如果 classWithSimpleMethods.GetString
可以轉換為 Func<string>
和 Action
,編譯器無法在它們之間進行選擇,導致歧義。
解析度(明確型別轉換):
解決方案是將方法組明確轉換為所需的委託類型:
<code class="language-csharp">classWithDelegateMethods.Method((Func<string>)classWithSimpleMethods.GetString);</code>
C# 7.3 改良:
C# 7.3 增強了方法組的重載解析。 在許多情況下(如提供的範例),classWithDelegateMethods.Method(classWithSimpleMethods.GetString)
和類似的呼叫現在無需明確轉換即可編譯。 然而,在複雜的場景中仍然可能出現歧義。
以上是為什麼 C# 中方法組重載解析失敗並出現不明確的呼叫錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!