C#语法忽略一个参数,询问可能性

时间:2014-03-14 07:17:44

标签: c# syntax parameters optional-parameters named-parameters

public static void Search(string name, int age = 21, string city = "Tehran")
{
    MessageBox.Show(String.Format("Name = {0} - Age = {1} - City = {2}", 
        name, age, city));
}

我想使用名称和城市参数调用搜索方法来保持年龄的默认值。

AFAIK参数应按名称引用

Search("Mahdi", city: "Mashhad");

我想知道是否可以在不指定年龄值的情况下拨打电话,也无需按姓名呼叫城市?我的意思是跳过一个参数,比如:

Search("Mahdi",,"Mashhad");

我发现for循环

的行为几乎相似
for (int i = 0; ; i++) { some code; }

或与案例匹配的任何其他语法?

3 个答案:

答案 0 :(得分:4)

只需创建一个overload,其中包含两个字符串参数:

public static void Search(string name, string city)
{
    Search(name, 21, city);
}

public static void Search(string name, int age = 21, string city = "Tehran")
{
    MessageBox.Show(String.Format("Name = {0} - Age = {1} - City = {2}", 
        name, age, city));
}

并称之为:

Search("Mahdi", "Mashhad");

答案 1 :(得分:2)

将其更改为

public static void Search(string name, string city = "Tehran", int age = 21)
{
    MessageBox.Show(String.Format("Name = {0} - Age = {1} - City = {2}", 
        name, age, city));
}

现在您可以将其用作

Search("Mahdi", "Mashhad");
  

可选参数在参数列表的末尾定义,   在任何所需参数之后。   http://msdn.microsoft.com/en-us/library/dd264739.aspx

答案 2 :(得分:1)

您可以为age使用可为空的int。像这样:

public static void Search(string name, int? age = null, string city = null)
{
    MessageBox.Show(String.Format("Name = {0} - Age = {1} - City = {2}", 
        name, age ?? 21, city ?? "Tehran"));
}

然后你可以调用以下组合:

Search("Mahdi");
Search("Mahdi", 20);
Search("Mahdi", null, "Cairo");

将使用age=21city="Tehran"作为默认值。