可选参数

Cha*_*lie 1 .net c# optional-parameters

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

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

Jon*_*eet 8

您是否仅限于使用C#1-3?C#4支持可选参数和命名参数......

在那之前,你应该要么超载坚持或者创建具有可变的特性,例如单独的类

FooOptions options = new FooOptions { Name="Jon", Location="Reading" };
Foo foo = new Foo(options);
Run Code Online (Sandbox Code Playgroud)

如果你想要的话,这一切都可以在一个语句中完成......如果某些属性是必需的,那么创建一个构造函数,FooOptions其中包含所有这些属性.

在C#4中你可以写:

Foo foo = new Foo(name: "Jon", location: "Reading");
Run Code Online (Sandbox Code Playgroud)

如果构造函数是作为

public Foo(string name,
           int age = 0,
           string location = null,
           string profession = null)
Run Code Online (Sandbox Code Playgroud)

命名参数和可选参数应该使得在C#4中使用可选属性构造不可变类型变得容易得多:)