Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语法忽略参数,询问可能性_C#_Syntax_Parameters_Optional Parameters_Named Parameters - Fatal编程技术网

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

C# C语法忽略参数,询问可能性,c#,syntax,parameters,optional-parameters,named-parameters,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)); } 我想使用name和city参数调用Search方法,以保持age的默认值 AFAIK参数应按名称引用 Search("Mahdi

拥有

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));
}
我想使用name和city参数调用Search方法,以保持age的默认值

AFAIK参数应按名称引用

Search("Mahdi", city: "Mashhad");
我想知道是否可以在不指定年龄值的情况下拨打电话,也不必按姓名拨打城市电话?我的意思是跳过一个参数,比如:

我在for循环中看到了几乎类似的行为

或者任何其他与大小写匹配的语法?

只需创建一个包含两个字符串参数的字符串,如下所示:

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");
这样称呼它:

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");
换成

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");
可选参数在参数列表的末尾定义, 在任何需要的参数之后。


可以使用可为null的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");

这将使用年龄=21和城市=Tehran作为默认值。

不,这是不可能的。for循环不接受任何参数-此行为与复制默认值不同,您可以调用Searchname,city:city@SergeyBerezovskiy我考虑过,但除非你也更改参数名,否则会导致无限递归。@p.s.w.g我认为编译器足够聪明,可以捕捉到这一点,它根本不进入递归。@MahdiTahsildari好吧,我在第一个重载中使用Searchname、city:city测试了这段代码,是的,它确实导致了递归。但是,如果您在第一个重载中更改city参数的名称,那么它可以正常工作。@p.s.w.g是的,您是对的-我没有注意到这里的self-call看起来不错,但是如果我们这样做,那么可选参数的意义是什么?如果所有参数都是非可选的,那么您必须始终提供所有三个参数。比如:SearchMahdi,null,null;不,我指的是理性的想法:有这种意义的辩论。在所有的答案中,这一个更符合逻辑,代码更少,一切都在它的位置上。谢谢。@MahdiTahsildari我只是因为我的英语水平而误解了它,我很高兴这对你有帮助。