c# - 返回类型为 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
返回类型?
解决方案
IEnumerable<>
是与迭代 a 相关的接口List<>
。返回 aList<>
会立即向 的使用者公开更多的操作,而GetMovies()
不是严格必要的操作——例如从集合中添加或删除——这可能更容易引入错误。没有技术上的理由选择IEnumerable<>
over List<>
,因为在引擎盖下它的行为是相同的。这个决定纯粹是实际的。
推荐阅读
- azure - 何时使用 Azure Blob 存储与 Azure 文件共享?
- node.js - 需要代码sugg。让我的规范创建小型管理应用程序
- php - 在长结果中使用 SQL Server 数据库在 Laravel 中获取 500 错误
- svelte - 如何从组件内部调用组件的销毁?
- java - 如何在单个返回中返回布尔“if-then-else”语句
- ios - SwiftUI ZStack 对齐错误
- c++ - 如何将项目从 QListWidget 拖放到 QPlainTextEdit?
- docker - 通过docker加载postgres的命令?
- java - 如何在 Hibernate/JPA 中持久化 EnumMap?
- firebase - 将 Firebase 数据实时获取到谷歌表格中