首页 > 解决方案 > 返回类型为 IEnumerable 而不仅仅是 List?

问题描述

我正在做一个 .NET MVC 教程。话虽如此,我遇到了这样的代码:

public class MoviesController : Controller
{
    public ActionResult Index()
    {
        var movies = GetMovies();

        return View(movies);
    }

    private IEnumerable<Movie> GetMovies()
    {
        return new List<Movie>
        {
            new Movie {Id = 1, Name = "Shrek"},
            new Movie {Id = 2, Name = "LotR"}
        };
    }
}

电影的索引视图如下所示:

@model IEnumerable<VideoStore.Models.Movie>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Movies</h2>
<table class="table table-bordered table-hover">
    <thead>
        <tr>
            <th>Movie</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var movie in Model)
        {
            <tr>
                <td>@movie.Name</td>
            </tr>
        }
    </tbody>
</table>

所以我的问题是,为什么在MoviesController私有方法GetMovies()中,使用IEnumerable返回类型?为什么不使用List返回类型?

标签: c#asp.net-mvcienumerable

解决方案


IEnumerable<>是与迭代 a 相关的接口List<>。返回 aList<>会立即向 的使用者公开更多的操作,而GetMovies()不是严格必要的操作——例如从集合中添加或删除——这可能更容易引入错误。没有技术上的理由选择IEnumerable<>over List<>,因为在引擎盖下它的行为是相同的。这个决定纯粹是实际的。


推荐阅读