安全地将 C# 中的 List<派生类> 转换为 List<基接口>
在使用 C# 集合时,您可能会遇到需要将派生类对象的列表转换为基接口对象的列表的情况。虽然这种转换看起来很简单,但在不同类型之间进行强制转换可能会导致潜在问题。
直接从一种类型强制转换为另一种类型(例如,从 List
为了安全地在这两种类型之间进行转换,我们需要创建一个新的目标类型列表。这可以通过迭代原始列表并将每个元素手动添加到新列表来实现。例如:
<code class="language-csharp">List<Client> clients = new List<Client>(); List<IDic> dics = new List<IDic>(); // 遍历 Client 列表 foreach (Client client in clients) { // 创建一个新的 IDic 对象并设置其属性 IDic dic = new Dic { Id = client.Id, Name = client.Name }; // 将新的 IDic 对象添加到 dics 列表 dics.Add(dic); }</code>
.NET 4 和 C# 4 中的其他选项
在 .NET 4 和 C# 4 中,您可以利用协变的概念来简化将 IEnumerable<派生类型> 转换为 IEnumerable<基类型> 的转换。这在处理只读集合时非常有用:
<code class="language-csharp">// 使用协变将 IEnumerable<Apple> 转换为 IEnumerable<IFruit> List<IFruit> fruit = apples.AsEnumerable<IFruit>().ToList();</code>
但是,需要注意的是,协变只适用于只读集合。如果您在创建 IEnumerable<基类型> 视图后修改原始列表,则更改不会反映在派生视图中。
以上是如何在 C# 中安全地将列表转换为列表?的详细内容。更多信息请关注PHP中文网其他相关文章!