簡體   English   中英

C#方法的區別僅在於可選參數

[英]C# Methods differ only by optional parameters

我找到了這個主題,但是它是VB ...,他們得到一個錯誤: vb問題

這是我的方法簽名。 請注意,其中一個具有不同的返回類型。

public static bool PopulateRunWithSimpleValueByFieldIdSync(string fieldValue, string fieldId, IViewModel myself, int index)

VS

public static void PopulateRunWithSimpleValueByFieldIdSync(string fieldValue, string fieldId, IViewModel myself, int index = 0, PopulateDoneCallback populateDone = null)

我實際撥打的電話是:

PopulateRunWithSimpleValueByFieldIdSync(date, dtx.DateField, saver, index);

編譯器決定選擇第一種方法,並且沒有給我錯誤。 一旦刪除了第一個方法(它是未使用的代碼),它將開始調用第二個方法。

某處是否有將其視為錯誤的選項?

如果您希望在編譯時進行標記,則需要使用某種形式的第三方代碼分析,因為C#語言規范將當前行為定義為應該發生的事情。

這是根據設計,根據規格

使用命名參數和可選參數會通過以下方式影響重載解析:

  • 如果方法,索引器或構造函數的每個參數都是可選的,或者按名稱或按位置對應於調用語句中的單個參數,並且該參數可以轉換為參數的類型,則它是執行的候選對象。

  • 如果找到多個候選者,則將首選轉換的重載解析規則應用於顯式指定的參數。 忽略可選參數的忽略參數。

  • 如果判斷出兩個候選者的性能相同,則優先選擇不具有可選參數且在調用中省略了參數的候選者。 這是對參數較少的候選對象在重載解析中普遍偏愛的結果。

所以,不-您不能。

根據C#語言指南重點是我的),

使用命名參數和可選參數會通過以下方式影響重載解析:

...

如果判斷出兩個候選者的性能相同,則優先選擇不具有可選參數的候選者,該可選參數的調用中省略了參數 這是對參數較少的候選對象在重載解析中普遍偏愛的結果。

您可以使用第三方分析工具將其標記為錯誤,也可以將Visual Studio的內置靜態代碼分析與實現的自定義規則一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM