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

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

DDD
DDD原创
2025-01-09 22:41:41393浏览

How Can I Cast a List to a List in C#?

在 C# 中将派生类列表转换为基类列表

此示例演示了一个常见问题:将派生类对象列表(例如 List<Cat>)传递给需要基类对象列表(List<Animal>)的方法。 不允许直接赋值,因为基类引用不能直接指向派生类对象。

问题:

尝试将 List<Cat> 传递给带有 List<Animal> 参数的方法会导致编译器错误。

解决方案:使用 IEnumerable 和协方差

该解决方案利用了 C# 的通用协方差。 不要使用 List<Animal>,而是将方法参数类型更改为 IEnumerable<Animal>IEnumerable 是只读接口;这可以防止该方法修改原始集合,从而解决潜在的类型安全问题。

修改后的代码:

<code class="language-csharp">class Animal
{
    public virtual void Play(IEnumerable<Animal> animals) { }
}

class Cat : Animal
{
    public override void Play(IEnumerable<Animal> animals)
    {
        //Implementation
    }
}

class Program
{
    static void Main()
    {
        Cat myCat = new Cat();
        myCat.Play(new List<Cat>()); // This now compiles successfully
    }
}</code>

这是有效的,因为 List<Cat> 隐式转换为 IEnumerable<Cat>,并且 IEnumerable<Cat>IEnumerable<Animal> 协变。 Play 方法现在可以安全地迭代集合,而无需尝试修改它。 这种方法保持类型安全,同时允许灵活的方法参数化。

以上是如何在 C# 中将列表转换为列表?的详细内容。更多信息请关注PHP中文网其他相关文章!

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