具有构造函数的模型 vs. 没有构造函数的模型 ASP.NET MVC

7

我正在开发一个ASP.NET MVC项目。我一直在寻找关于这个主题的学习资源,现在我遇到了一个需要澄清的情况。假设:

public class Foo
{
    public int Id { get; set; }
    public string FooName { get; set; }
    public virtual Bar Bar { get; set; }
}

并且

public class Bar
{
    public Bar()
    {
        this.Foos = new List<Foo>;
    }

    public int Id { get; set; }
    public string BarDesc { get; set; }
    public virtual List<Foo> Foos { get; set; }
}

我的意思是,具有构造函数的模型Bar与没有构造函数的模型Bar有什么区别?请忽略属性中的任何错误(如果有的话)或实体之间的可能关系,因为我只想澄清在模型中使用构造函数的问题。谢谢!


1
模型只是一个C#类,没有什么特别的与模型或ASP.NET MVC有关。 - axmrnv
是的,我知道那个。我只是想要一些澄清。 - Cyval
1个回答

11

使用您展示的构造函数,Bar.Foos将是一个类型为Foo的空List。

如果没有构造函数,Bar.Foos将为null(除非您在其他地方初始化它)。

这就是您在这两行之间看到的不同之处:

List<SomeType> test1 = null;
List<SomeType> test2 = new List<SomeType>();
假设您正在使用C# 6,另一种不使用构造函数初始化的方法是:
public class Bar
{
    public int Id { get; set; }
    public string BarDesc { get; set; }
    public virtual List<Foo> Foos { get; set; } = new List<Foo>();
}

你选择的三种技术取决于以下几点:你是否始终希望属性被初始化;如果有多个构造函数,哪一个更好看;你对空集合引用和空集合的感觉如何等等。


谢谢,这是不是意味着对于每个带有列表的类,我都应该初始化列表?@mason - Cyval
1
@ImmanuelValle 我在我的答案中添加了一句最终的话,涉及到你必须做出的决定。 - mason
1
我建议始终将其初始化为空列表。这样,您就不必担心检查空值。 - Keith Rousseau
1
@KeithRousseau 你可以选择始化你的列表(这也是我做的),但其他开发人员可能不会这样做,所以你仍然需要担心如果使用别人的代码可能会出现潜在的NullReferenceException。 - mason
3
是的,但我只是想为伊曼纽尔指出这一点。这个观点是“编写代码时要尽量减少错误,但不要相信他人也会这样做”。 - mason
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接