MVC3对C#可选参数做了什么?

P.B*_*key 2 c# asp.net-mvc-3

设置以下控制器

public class HomeController : Controller
{
    // GET: /Home/Read    
    public string Read(Sample sample = null)
    {
        if (sample != null)
            Console.WriteLine("Not null");
        else
            Console.WriteLine("null");

        return "";
    }

}
public class Sample
{

}
Run Code Online (Sandbox Code Playgroud)

示例不为空.这是一个错误还是一个功能?

dle*_*lev 5

可选参数通过呼叫站点重写实现.由于MVC引擎将使用完整参数列表调用控制器,因此可选参数根本不相关.

例如,给定以下功能:

public void Foo(int bar = 1, int baz = 2)
{
}
Run Code Online (Sandbox Code Playgroud)

这样称呼它:

Foo();
Run Code Online (Sandbox Code Playgroud)

使编译器实际将其解释为:

Foo(1, 2);
Run Code Online (Sandbox Code Playgroud)

没有任何魔法发生,因为调用保持为Foo(),然后方法本身在运行时在参数中.这些参数在编译时被编入,没有什么需要做的.

更新:要向MVC指示给定路由参数是可选的,您可以UrlParameter.Optional在定义路径时将其设置为.此时,操作方法的默认参数值应该启动.