我有这门课
public class FilterQuery
{
public FilterQuery() { }
public string OrderBy { set; get; }
public string OrderType { set; get; }
public int? Page { set; get; }
public int ResultNumber { set; get; }
}
Run Code Online (Sandbox Code Playgroud)
我想像这样使用它
public IQueryable<Listing> FindAll(FilterQuery? filterQuery)
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Nol*_*rin 21
这立即引出了为什么这样的问题.类是定义引用类型,因此已经可以为空.将它们包装在可空类型中是没有意义的.
在您的情况下,您可以简单地定义:
public IQueryable<Listing> FindAll(FilterQuery filterQuery)
Run Code Online (Sandbox Code Playgroud)
并调用FindAll(null)
不传递过滤查询.
如果您使用的是C#/ .NET 4.0,那么一个不错的选择是:
public IQueryable<Listing> FindAll(FilterQuery filterQuery = null)
Run Code Online (Sandbox Code Playgroud)
这意味着您甚至不必指定null.在以前的版本中,重载会执行相同的操作.
编辑:每个请求,重载只是看起来像:
public IQueryable<Listing> FindAll()
{
return FindAll(null);
}
Run Code Online (Sandbox Code Playgroud)
没有必要这样做; 所有class
类型都是引用类型,这意味着它可以通过定义为空.实际上,没有办法强制它在编译时它是非null的.
该Nullable<T>
结构旨在允许值类型(根据定义,不是null)表示空值.
值得注意的是,Nullable<T>
与null
(或Nothing
在VB.NET中)进行比较的能力是语法糖; 因为它Nullable<T>
是一个结构,它实际上不可能null
.在它代表一个空值的情况下,HasValue
是false
和Value
是default(T)
.
归档时间: |
|
查看次数: |
9731 次 |
最近记录: |