【问题标题】:Why in this C# .NET controller method do I have this signature?为什么在这个 C# .NET 控制器方法中我有这个签名?
【发布时间】:2014-06-17 13:51:17
【问题描述】:

我是 C# .NET 的新手,我有以下疑问。

在我正在处理的页面上,我找到了以下链接:

<a class="ui-btn-inline ui-btn ui-icon-delete ui-btn-icon-notext ui-corner-all" href="@Url.Action("Delete", "Groups", new { id = item.gruppoId })">Delete</a>

此链接调用 GroupsController 类的 Delete() 方法。

好的,就是这个方法:

public ActionResult Delete(int id = 0)
{
    .......................
    .......................
    .......................
    DO SOME STUFF
    .......................
    .......................
    .......................
    return View(model);
}

我的疑惑与这个方法的签名有关:为什么参数int id = 0

= 0 是什么意思?一开始,我认为这是一个简单的初始化,它将 it 值更改为 0,但使用调试器我发现它不会更改 id 值。那么它到底是做什么的呢?

【问题讨论】:

标签: c# asp.net .net asp.net-mvc


【解决方案1】:

它被称为可选参数。这意味着您可以不带参数调用该方法,如下所示:

Delete();

如果这样做,函数中id 参数的值将是0

【讨论】:

    【解决方案2】:

    你说得对,= 0 设置了id 参数的值。

    但重要的是要注意它只有在不传递该参数时才会这样做

    举个例子:

    public void SaySomething( var something = "Hello" )
    {
        Console.WriteLine( something );
    }
    
    //...
    
    SaySomething();
    SaySomething("I am sleeping.");
    

    对函数的第一次调用不传递参数。因此,默认值"Hello"用于写入控制台。

    第二次调用已经为参数设置了一个值,因此它不会被您设置的默认值覆盖。在这种情况下将打印"I am sleeping."

    【讨论】:

    • 重要的是要注意代码分析不喜欢这样。它会告诉你重载没有参数的函数,并从传入默认值的无参数函数中调用需要参数的函数。
    • @Zach 我还没有使用代码分析。我会相信你的话;)
    • 如果您希望 Visual Studio 抱怨您的代码有多糟糕,请随时打开它。 :)
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多