可空类?

时间:2010-06-28 13:18:46

标签: c# class nullable

我有这个班级

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)

这可能吗?

2 个答案:

答案 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。在代表空值的情况下,HasValuefalseValuedefault(T)