サーチ…


名前付き引数は、コードをより明確にすることができます

この単純なクラスを考えてみましょう:

class SmsUtil
{
    public bool SendMessage(string from, string to, string message, int retryCount, object attachment)
    {
         // Some code
    }
}

C#3.0より前は:

var result = SmsUtil.SendMessage("Mehran", "Maryam", "Hello there!", 12, null);

名前付き引数を使用してこのメ​​ソッドをさらに明確に呼び出すことができます

var result = SmsUtil.SendMessage(
    from: "Mehran",
    to:  "Maryam",
    message "Hello there!",
    retryCount: 12,
    attachment: null);

名前付き引数とオプションのパラメータ

名前付き引数をオプションのパラメータと組み合わせることができます。

この方法を見てみましょう:

public sealed class SmsUtil
{
    public static bool SendMessage(string from, string to, string message, int retryCount = 5, object attachment = null)
    {
         // Some code
    }
}

retryCount引数設定せずにこのメソッドを呼び出す場合は、次のようにします。

var result = SmsUtil.SendMessage(
                        from       : "Cihan",
                        to         : "Yakar",
                        message    : "Hello there!",
                        attachment : new object());

引数の順序は必要ありません

名前付き引数は、任意の順序で配置できます。

サンプルメソッド:

public static string Sample(string left, string right)
{
     return string.Join("-",left,right);
}

呼び出しサンプル:

Console.WriteLine (Sample(left:"A",right:"B"));
Console.WriteLine (Sample(right:"A",left:"B"));

結果:

A-B
B-A

名前付き引数は、オプションのパラメータのバグを避ける

メソッドが変更されたときの潜在的なバグを避けるために、常にオプション引数に名前付き引数を使用してください。

class Employee
{
    public string Name { get; private set; }

    public string Title { get; set; }

    public Employee(string name = "<No Name>", string title = "<No Title>")
    {
        this.Name = name;
        this.Title = title;
    }
}

var jack = new Employee("Jack", "Associate");   //bad practice in this line

上記のコードは、コンストラクタがいつかのように変更されるまで、コンパイルして正常に動作します:

//Evil Code: add optional parameters between existing optional parameters
public Employee(string name = "<No Name>", string department = "intern", string title = "<No Title>")
{
    this.Name = name;
    this.Department = department;
    this.Title = title;
}

//the below code still compiles, but now "Associate" is an argument of "department"
var jack = new Employee("Jack", "Associate");

「チームの他の誰かが間違っている」ときのバグを避けるためのベストプラクティス:

var jack = new Employee(name: "Jack", title: "Associate");


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow