在C#中使用可选参数作为对象

时间:2014-05-20 21:21:34

标签: c# asp.net optional-parameters optional-arguments

我有这段代码:

public IHttpActionResult Get([FromUri]GetFilesRequest request)

如果请求 null ,我想创建一个新的 GetFilesRequest ,因为在构造函数中我这样做是为了创建类的默认参数:

public GetFilesRequest()
    {
        Sort = "latest";
        Filter = "";
    }

所以我在考虑:

public IHttpActionResult Get([FromUri]GetFilesRequest request = new GetFilesRequest)

但是我收到了这个警告:

'request' is of type 'GetFilesRequest'. A default parameter value of a reference type other than string can only be initialized with null.

3 个答案:

答案 0 :(得分:5)

否 - 默认值必须是编译时常量。你可以改用过载吗?

public IHttpActionResult Get()
{
     return Get(new GetFilesRequest());
}

答案 1 :(得分:4)

您只能使用编译器可以创建的常量值。你所拥有的将需要运行时对象分配,这就是编译器抱怨的原因。尝试这样的事情。

public IHttpActionResult Get([FromUri]GetFilesRequest request = null) {
    request = request ?? new GetFilesRequest();
}

答案 2 :(得分:2)

由于错误表明这不可能作为参数。但是,您可以重新构建代码

public IHttpActionResult Get([FromUri]GetFilesRequest request = null)
{
   if (request == null) request = new GetFilesRequest();

   // TODO : Remaining method body
}