1

当我遇到这个时,我正在阅读 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");如果我使用...有什么区别。谢谢。

4

3 回答 3

3

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 构造函数,它将使代码更简单 - 或者如果您仍想明确显示名称部分,您可以创建一个Genre.FromName静态方法。

于 2012-07-27T08:25:32.227 回答
3

genres.Add我认为您的意思是它和(List<T>.Add方法)之间的区别,Genre.Add可能是变量Genre上的静态方法或实例方法Genre,两者都没有发布。

最终代码中没有行为差异,只是视觉上的差异。

不知道你为什么使用dynamic(也许你正在寻找var?),但不同的是这被称为集合初始化语法.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为您输出。

这三种在 C# 中创建新 List<string> 的方式有什么区别?

同样在您的示例中,您会看到对象初始化器语法:

new Genre { Name = "Disco" }

这相当于:

var g = new Genre();
g.Name = "Disco";
于 2012-07-27T08:25:40.347 回答
1

在编译术语中没有。它实际上是语法糖

dynamic genres = new List<Genre();
genres.Add(new Genre...

这就是我假设你的意思,因为Genre.Add(string)没有描述。

于 2012-07-27T08:25:10.160 回答