添加项目到列表
我要去一个通过MVC教程时,我碰到这样的:添加项目到列表
public ActionResult Index()
{
dynamic genres = new List<Genre> {
new Genre { Name = "Disco" },
new Genre { Name = "Jazz" },
new Genre { Name = "Rock" }
};
return View(genres);
}
有什么区别,如果我使用Genre.Add("Disco");
...相反。谢谢。
我想你的意思是说Genre.Add
和genres.Add
(该List<T>.Add
法)之间的差异可能是在Genre
一个静态方法或在Genre
变量,无论它已经发布了一个实例方法。
没有行为最终代码的区别,它只是一个视觉差异。
不知道为什么你正在使用dynamic
(也许你正在寻找var
?),但不同的是,这个被称为collection initialization syntax,基本上糖在手动调用.Add
:
var genres = new List<Genre> {
new Genre { Name = "Disco" },
new Genre { Name = "Jazz" },
new Genre { Name = "Rock" }
};
相当于:
var genres = new List<Genre>();
genres.Add(new Genre { Name = "Disco" });
genres.Add(new Genre { Name = "Jazz" });
genres.Add(new Genre { Name = "Rock" });
编译器为您输出.Add
您的情况。
Whats the difference between these three ways of creating a new List<string> in C#?
在你的榜样而且,你所看到的对象初始化语法有:
new Genre { Name = "Disco" }
这相当于:
var g = new Genre();
g.Name = "Disco";
以汇编术语无。它实际上是语法糖
dynamic genres = new List<Genre();
genres.Add(new Genre...
这就是我假设你的意思,因为Genre.Add(string)
没有描述。
你是如何确定它没有描述? :) – nawfal 2012-07-27 08:30:04
不清楚为什么您在这里使用dynamic
开始,说实话。但如果你使用
List<Genre> genres = new List<Genre>();
genres.Add(new Genre { Name = "Disco" });
genres.Add(new Genre { Name = "Jazz" });
genres.Add(new Genre { Name = "Rock" });
它会有同样的效果。
请注意,它是genres.Add
,而不是Genre.Add
。我也建议如果你创建一个名称为类型构造函数,它会使代码变得更简单 - 或者如果你还想让名称部分明确,你可以创建一个Genre.FromName
静态方法。
或者是'Add'是一个静态方法在Genre上创建它自己的对象,由字符串Name命名。除非我们看到体裁班,没有什么可以说:) – nawfal 2012-07-27 08:29:12