2009-07-30 65 views
1

我有一個方法需要一堆可選參數,並且我重載了提供簽名不同組合的方法。智能感知彈出一堆不同的簽名,但我認爲現在看起來很混亂,因爲我需要提供不同的組合,而不僅僅是在方法簽名的末尾建立參數。可選參數

我應該只是不超載我的方法,並堅持一個簽名,以便我的方法的用戶必須通過空值?這會使簽名更清晰,但使調用代碼看起來更加混亂。

回答

8

您是否僅限於使用C#1-3? C#4支持可選參數和命名參數...

在那之前,你應該要麼棒超載創建具有可變的特性一個單獨的類,例如

FooOptions options = new FooOptions { Name="Jon", Location="Reading" }; 
Foo foo = new Foo(options); 

這都可以在一個聲明,如果你想要做......如果某些屬性是強制性的,然後創建FooOptions一個構造函數這需要所有的人。

在C#4你可以寫:

Foo foo = new Foo(name: "Jon", location: "Reading"); 

如果構造被寫成

public Foo(string name, 
      int age = 0, 
      string location = null, 
      string profession = null) 

命名參數和可選參數應該讓人們更方便構建穩定的類型在C#4中有可選屬性:)

+0

是的,在C#2恐怕,必須等待C#4和可選參數。 – Charlie 2009-07-30 14:49:24

+0

是的,這將非常方便 – SwDevMan81 2009-07-30 14:51:44

0

想一想c#方法的params參數。

void test(params object []arg) { 
    .. 
} 
+4

幾乎可以肯定是錯誤的方法:除非所有參數都是相同的類型,否則會失去類型安全性,並且會失去關於哪個參數意味着什麼的任何線索。 – 2009-07-30 14:49:42

0

你可以使用params keyword如果函數定義僅在長度上變化(而不是命令,否則這不會是最好的方法)。然後在功能,您可以設置的值,您需要根據參數輸入