可空类?

ili*_*ica 3 c# nullable class

我有这门课

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)


Ada*_*son 7

没有必要这样做; 所有class类型都是引用类型,这意味着它可以通过定义为空.实际上,没有办法强制它在编译时它是非null的.

Nullable<T>结构旨在允许值类型(根据定义,不是null)表示空值.

值得注意的是,Nullable<T>null(或Nothing在VB.NET中)进行比较的能力是语法糖; 因为它Nullable<T>是一个结构,它实际上不可能null.在它代表一个空值的情况下,HasValuefalseValuedefault(T).