C# Language                
            Namngivna argument
        
        
            
    Sök…
Namngivna argument kan göra din kod tydligare
Tänk på denna enkla klass:
class SmsUtil
{
    public bool SendMessage(string from, string to, string message, int retryCount, object attachment)
    {
         // Some code
    }
}
Innan C # 3.0 var det:
var result = SmsUtil.SendMessage("Mehran", "Maryam", "Hello there!", 12, null);
du kan göra denna metodsamtal ännu tydligare med namngivna argument :
var result = SmsUtil.SendMessage(
    from: "Mehran",
    to:  "Maryam",
    message "Hello there!",
    retryCount: 12,
    attachment: null);
Namngivna argument och valfria paramaters
Du kan kombinera namngivna argument med valfria parametrar.
Låt oss se denna metod:
public sealed class SmsUtil
{
    public static bool SendMessage(string from, string to, string message, int retryCount = 5, object attachment = null)
    {
         // Some code
    }
}
 När du vill ringa den här metoden utan att ställa in retryCount argumentet: 
var result = SmsUtil.SendMessage(
                        from       : "Cihan",
                        to         : "Yakar",
                        message    : "Hello there!",
                        attachment : new object());
Argumentordning är inte nödvändig
Du kan placera namngivna argument i vilken ordning du vill.
Provmetod:
public static string Sample(string left, string right)
{
     return string.Join("-",left,right);
}
Ring prov:
Console.WriteLine (Sample(left:"A",right:"B"));
Console.WriteLine (Sample(right:"A",left:"B"));
Resultat:
A-B
B-A
Namngivna argument undviker buggar på valfria parametrar
Använd alltid namngivna argument till valfria parametrar för att undvika potentiella buggar när metoden ändras.
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
Ovanstående kod sammanställs och fungerar bra tills konstruktören byts någon dag som:
//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");
Bästa praxis för att undvika buggar när "någon annan i teamet" gjorde misstag:
var jack = new Employee(name: "Jack", title: "Associate");
Modified text is an extract of the original Stack Overflow Documentation
        Licensierat under CC BY-SA 3.0
        Inte anslutet till Stack Overflow