【问题标题】:How do I make a function not care about missing arguments in C# [duplicate]如何使函数不关心 C# 中缺少的参数 [重复]
【发布时间】:2012-11-25 00:21:42
【问题描述】:

可能重复:
How can you use optional parameters in C#?

我正在制作文字冒险,并使用我在网上找到的一些代码,我有打字机风格的打印。所以我在一个函数中有这个代码,除了传递代码来输入之外,我还试图传递类型之间的延迟。现在我的问题是我并不总是想输入延迟参数,我尝试搜索 int 变量的默认值并查看是否制作 if 语句检查变量是否不是默认值以及是否不是默认值,它会使用传入的内容。除了它仍然不起作用,它仍然希望我传递一些东西。他们无论如何都要让它发挥作用吗?

对不起,如果我的问题令人困惑,我不是最擅长制作不令人困惑的句子...(看到了吗?)

【问题讨论】:

  • 那么如果没有提供值怎么办呢?你知道一个有意义的值吗?如果没有提供值,你想完全做其他事情吗?
  • 如果您发现难以用文字表达您的代码,最好将其包含在 as code...

标签: c# function console-application


【解决方案1】:
public void Task (String optional = "default") {
   ...
}

【讨论】:

  • 在他的例子中,int delay = 0int? delay = null 如果你想要一个可为空的 int (在 0 不同于 null 的情况下)
【解决方案2】:

你可以使用Optional Arguments:

public void MovePerson(int x, int y, int delay = 300) 
{

}

在这里,在这个完全组成的函数中,您可以构建一个默认延迟,如果您在调用该函数时未指定值,则该延迟将设置为 300。

MovePerson(10, 20);  //Delay for 300
MovePerson(10, 20, 100); //Delay for 100

【讨论】:

  • 谢谢,这很有帮助!没想到这么简单……
  • 没问题,很高兴能帮上忙。
【解决方案3】:

只使用默认参数

int Multiply (int a = 10, int b = 20)
{
    return a * b;
}

或者你也可以重载一个函数

int Multiply ()
{
    return 10 * 20;
}
int Multiply (int a, int b)
{
    return a * b;
}

【讨论】:

    【解决方案4】:

    解决此问题的传统方法是使用多个方法重载。这是一个例子:

    public class Foo
    {
        public void Bar(string value)
        {
            Console.WriteLine(value);
        }
    
        public void Bar()
        {
            Bar("I have no value :(");
        }
    }
    

    您可以调用Bar("hello world") 或只调用Bar(),它将使用默认值。

    此后,C# 引入了语法糖来简化此操作,因为它是一种常见的模式,通过使用可选参数:

    public void Bar(string value = "I have no value :(")
    {
        Console.WriteLine(value);
    }
    

    这最终会以(大致)相同的方式工作,但更容易输入。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      相关资源
      最近更新 更多