我有这个班级
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; }
}
我想像这样使用它
public IQueryable<Listing> FindAll(FilterQuery? filterQuery)
这可能吗?
答案 0 :(得分:20)
这会立即引发 why 的问题。根据定义,类是引用类型,因此已经可以为空。将它们包装成可空类型是没有意义的。
在您的情况下,您可以简单地定义:
public IQueryable<Listing> FindAll(FilterQuery filterQuery)
并致电FindAll(null)
以不传递过滤查询。
如果您使用的是C#/ .NET 4.0,那么一个不错的选择是:
public IQueryable<Listing> FindAll(FilterQuery filterQuery = null)
这意味着您甚至不必指定null。在以前的版本中,重载会执行相同的操作。
编辑:根据请求,重载只是看起来像:
public IQueryable<Listing> FindAll()
{
return FindAll(null);
}
答案 1 :(得分:6)
没有必要这样做;所有class
类型都是引用类型,这意味着它可以通过定义为空。实际上,在编译时没有办法强制它非null 。
Nullable<T>
结构体旨在允许值类型(根据定义,不是null)表示空值。
值得注意的是,将Nullable<T>
与null
(或VB.NET中的Nothing
)进行比较的能力是语法糖;因为Nullable<T>
是一个结构,它实际上不能是null
。在代表空值的情况下,HasValue
为false
,Value
为default(T)
。