首页 >后端开发 >C++ >如何在 C# 中安全地将列表转换为列表?

如何在 C# 中安全地将列表转换为列表?

Barbara Streisand
Barbara Streisand原创
2025-01-17 00:46:09188浏览

How to Safely Convert a List to a List in C#?

安全地将 C# 中的 List<派生类> 转换为 List<基接口>

在使用 C# 集合时,您可能会遇到需要将派生类对象的列表转换为基接口对象的列表的情况。虽然这种转换看起来很简单,但在不同类型之间进行强制转换可能会导致潜在问题。

直接从一种类型强制转换为另一种类型(例如,从 List 到 List)在 C# 中是不可能的,因为它会导致不安全的运算。尝试这种强制转换可能会导致异常或意外行为。

为了安全地在这两种类型之间进行转换,我们需要创建一个新的目标类型列表。这可以通过迭代原始列表并将每个元素手动添加到新列表来实现。例如:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn