可以为空或默认值?

时间:2012-08-16 13:30:38

标签: c# nullable

我应该使用什么课程?

public class Category
{
    public int Id {get;set;}
    public int IdParent {get;set;}
    public string Title {get;set;}
}
or
public class Category
{
    public int Id {get;set;}
    public Nullable<int> IdParent {get;set;}
    public string Title {get;set;}
}

考虑到自动增量从1开始,类别可以没有父类别。

4 个答案:

答案 0 :(得分:3)

如果没有父母,你想要可以为空。

为了使您的代码更具可读性,您可以:

public class Category
{
    public int Id {get;set;}
    public int? IdParent {get;set;}
    public string Title {get;set;}
}

(编辑:此外,类声明不应该有parens)

答案 1 :(得分:1)

Nullable<int>比使用默认值更好地传达意图,所以我肯定会使用它而不是检查零。它还会检查所需的空值,而如果您使用的是默认值,则可能会忘记进行检查。

如果您决定将零作为“无父”,则应为其定义命名常量:

public class Category
{
    public const int NoParent = 0;
    public int Id {get;set;}
    public int IdParent {get;set;}
    public string Title {get;set;}
}

答案 2 :(得分:1)

我不确定你要做什么,但是如果你想用它来插入自动增量,你可能也希望你的id也可以为空。

public class Category
{
    public int? Id { get; set; }
    public int? IdParent { get; set; }
    public string Title { get; set; }
}

答案 3 :(得分:0)

我会使用第二个选项,因为它更好地传达了一个类别没有父级的事实。使用第一个选项,您需要使用魔术值来表示缺少父级。