簡體   English   中英

C# 參數取決於枚舉值

[英]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.

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