[英]C# parameter depends on enum value
我正在尋找這種功能的解決方案。 那可能嗎? 也許與 generics? 我想要一個參數類型取決於枚舉值的 Add-Function。 我知道還有其他一些解決方案,但我希望看到/擁有該解決方案。
public enum eSomeEnum
{
//only Int32
Value1 = 1,
//only string
Value2 = 2,
//only MyClass
Value3 = 3,
}
private void Test()
{
Int32 n1 = 61;
string s2 = "Hello";
MyClass c3 = new MyClass();
//correct
Add(eSomeEnum.Value1, n1);
Add(eSomeEnum.Value2, s2);
Add(eSomeEnum.Value3, c3);
//wrong type
Add(eSomeEnum.Value3, s2); --> Compiler Error
}
這不是可以直接在簽名級別強制執行的事情; 對於Add(eSomeEnum.Value2, s2);
要合法,簽名Add(eSomeEnum, string)
必須有效,即Add(eSomeEnum.Value3, s2);
必須有效。
您可能可以編寫一個 Rosyln 分析器來發現此模式並將其標記為警告,但這是一個相當高級的主題。 它也無法涵蓋所有場景,例如使用的枚舉不是文字,而是表達式結果。 您可能只需要在這里依賴運行時驗證/異常。
或者,考慮使用以下方法:
public void Add(int value) => Add(eSomeEnum.Value1, value);
public void Add(string value) => Add(eSomeEnum.Value2, value);
public void Add(MyClass value) => Add(eSomeEnum.Value3, value);
// (and your existing Add method, now 'private')
現在調用者不會弄錯。 如果每個類型有多個枚舉有效,則可以擴展此功能:
public void AddFoo(string value) => Add(eSomeEnum.Value2, value);
public void AddBar(string value) => Add(eSomeEnum.Value3, value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.