可为空或默认值?

问题描述:

我应该使用什么类?可为空或默认值?

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开始,并且类别可以没有父类别。

+0

只取决于你,你如何处理你没有价值的地方。您将执行类似if!= null的操作,或者如果!= defaultValue。只需使用您想要的 – 2012-08-16 13:33:18

+0

IdPparent可以为NULL吗?在那种情况下,使用Nullable!尝试更详细地描述您的问题,以便我们可以帮助您! – Haris 2012-08-16 13:33:46

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

如果它可以没有父母,你希望为空。

为了使您的代码更易读,你可以这样做:

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

(编辑:此外,类声明应该不会有括号)

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;} 
} 

我不知道你想做什么,但如果你想用它来插入自动增量,你可能希望你的ID也可以为空。

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

ID更有可能总是有一个值,但*类别不会有父母,所以需要有一些“无价值”的表示。 – Servy 2012-08-16 13:48:04

+0

通常,虽然如果你使用这个作为插入模型来使用短小精悍和自动递增的ID字段(我做了很多),你肯定会希望这是一个可空的int。 – Kell 2012-08-16 14:53:33

+0

我所使用的大多数数据库框架都为您自动生成数据持有者类。不是那个吗? – Servy 2012-08-16 14:55:19