可选参数

时间:2009-07-30 14:43:01

标签: c# .net optional-parameters

我有一个方法需要一堆可选参数,我正在重载方法以提供不同的签名组合。 Intellisense弹出一堆不同的签名,但我认为现在看起来很混乱,因为我需要提供不同的组合,而不仅仅是在方法签名的末尾建立参数。

我应该不重载我的方法并坚持一个签名,以便我的方法的用户必须传入空值?它会使签名更清晰,但会使调用代码变得更加混乱。

3 个答案:

答案 0 :(得分: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中构造具有可选属性的不可变类型:)

答案 1 :(得分:0)

考虑c#方法的params参数。

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

答案 2 :(得分:0)

如果函数定义的长度不同(而不是顺序,则可以使用params keyword。否则这不是最好的方法。)然后在函数中,您可以根据参数输入设置所需的值