【问题标题】:Can I give a default value to parameters or optional parameters in C# functions?我可以为 C# 函数中的参数或可选参数赋予默认值吗?
【发布时间】:2017-01-16 01:59:42
【问题描述】:

我可以在 C# 中给出默认参数吗?

在 C 中:

void fun(int i = 1)
{
    printf("%d", i);
}

我们可以给参数一个默认值吗?在 C# 中可能吗?如果是这样,我们可以避免重载函数吗?

向现有函数添加可选参数始终是一种不好的做法。如果您正在处理的项目必须引用具有函数的类,并且我们使用可选值更改了参数,则可能会引发找不到该方法的运行时异常。

这是因为我们会考虑,如果我们添加一个额外的可选值,如果该函数在很多地方使用,则不需要更改代码。

function Add(int a, int b);

这将使用这种方式调用:

Add(10, 10);

但是如果我们像这样添加一个可选参数,

function Add(int a, int b, int c = 0);

然后编译器期望

Add(10, 10, 0);

实际上我们是这样调用 Add(10, 10) 的,这个函数在那个类中不可用,并导致运行时异常。

这发生在向一个被很多地方调用的函数添加一个新参数时,我不确定每次都会发生这种情况。但我建议你重载这个函数。

我们总是需要重载具有可选参数的方法。此外,如果您正在使用具有多个可选参数的函数,那么最好使用参数名称来传递值。

function Add(int a, int b, int c = 0);

使用以下方式调用此函数总是好的。

Add(10, 20, c:30);

【问题讨论】:

  • @Vyas 现在 C# 4.0 是可能的
  • @nawfal 它问了很久,在使用可选参数时我遇到了一些问题。所以我更新了问题。
  • @VeeKayBee 没错,但你有什么问题吗(在编辑中)?如果您想说明这一点,为什么不在相关的帖子中回答它(甚至可能是这个)?
  • @nawfal 感谢您的建议。我会更新为答案

标签: c#


【解决方案1】:

这正是您在 C# 中的操作方式,但该功能首先是在 .NET 4.0 中添加的

【讨论】:

  • 可以在.NET 3.5中使用
  • Visual Studio 2010+ 具有 msbuildmultitargeting 功能 (msdn.microsoft.com/en-us/library/vstudio/…)。它可以使用.NET 4.0 的目标包将您的可选参数构建到一堆重载方法中。
  • 内联方法(Func、Action、delegate)呢?
【解决方案2】:

是的。见Named and Optional Arguments。注意默认值需要是常量,这样就可以了:

public string Foo(string myParam = "default value") // constant, OK
{
}

但这不是:

public void Bar(string myParam = Foo()) // not a constant, not OK
{
}

【讨论】:

    【解决方案3】:

    只有从 C# 4.0 开始才有可能

    但是,当您使用 4.0 之前的 C# 版本时,您可以使用重载方法解决此问题:

    public void Func( int i, int j )
    {
        Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j));
    }
    
    public void Func( int i )
    {
        Func (i, 4);
    }
    
    public void Func ()
    {
        Func (5);
    }
    

    (或者,您可以升级到 C# 4.0 offcourse)。

    【讨论】:

      【解决方案4】:

      是的,但您需要使用 .NET 3.5 和 C# 4.0 才能获得此功能。

      This MSDN page 有更多信息。

      【讨论】:

        【解决方案5】:

        此功能可从 C# 4.0 获得 - 它是在 Visual Studio 2010 中引入的。您可以在 .NET 3.5 的项目中使用它。因此无需将 .NET 3.5 中的旧项目升级到 .NET 4.0。

        您只需要使用 Visual Studio 2010,但请记住它应该编译为默认语言版本(在项目 Properties->Buid->Advanced... 中设置它)

        This MSDN page 有更多关于 VS 2010 中可选参数的信息。

        【讨论】:

          【解决方案6】:

          这是 C# 4.0 的一个特性,但在该版本之前不使用函数重载是不可能的。

          【讨论】:

            猜你喜欢
            • 2015-05-19
            • 2011-04-18
            • 2014-04-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-11
            相关资源
            最近更新 更多