c# - 带构造函数的模型与不带构造函数的模型 ASP.NET MVC

标签 c# asp.net-mvc asp.net-mvc-4

我正在使用 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.Foos 将是一个 Foo 类型的空列表。

如果没有构造函数,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>();
}

你选择三种技术中的哪一种取决于你,取决于你是否总是希望属性被初始化,如果你有多个构造函数,你认为哪个看起来更好,你对空集合引用的感觉与空集合等

关于c# - 带构造函数的模型与不带构造函数的模型 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34425666/

相关文章:

c# - NewtonSoft Json 使用括号方法检索数据

c# - 如何使用 Visual Studio 2012 从源代码管理中分离项目?

c# - 用asp.net 5 应用程序部署源代码有什么好处?

jquery - 在 MVC 4 中将多个参数传递给操作时,困惑是使用 GET 还是 POST

c# - 放置 WindsorContainer 并避免循环项目引用的最佳位置在哪里?

c# - 双重 dispatch 和备选方案

c# - Json.NET 自定义 ValueProvider 将 Objects 转换为 Guid

asp.net - 在 Asp.net MVC 5 应用程序中将 AngularJS 升级到 Angular 6

c# - HttpClient 请求头自定义

c# - 为 DateTime 填充 EditorFor