2009-07-30 64 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如果函数定义仅在长度上变化(而不是命令,否则这不会是最好的方法)。然后在功能,您可以设置的值,您需要根据参数输入