gpt4 book ai didi

c# - 在泛型集合之间转换

转载 作者:行者123 更新时间:2023-11-30 12:48:48 25 4
gpt4 key购买 nike

在下面的例子中,为什么我不能投collectionAcollectionB鉴于编译器知道 TItemA<T>

public class A<T>
{
}

public void Foo<TItem, T> () where TItem : A<T>
{
var collectionA = new List<TItem>();
var collectionB = (List<A<T>>)collectionA; // "Cannot cast" error here
}

最佳答案

问题是它会允许您将不合适的项目放入 collectionA。

这是对其进行的简化修改,希望可以更容易地发现问题:

假设你有(伪代码):

class Animal {...}

class Dog: Animal { Bark(){} }

class Cat: Animal { Meow(){} }

现在想象一下您可以这样做:

var dogs = new List<Dog>();

dogs.Add(new Dog());

dogs[0].Bark();

var animals = (List<Animal>) dogs;

那么你就可以这样做:

animals.Add(new Animal()); // Adds an Animal to the list 'dogs', which 'animals' references.

dogs[1].Bark(); // dogs will now have two elements, but the second isn't a dog -
// so calling Bark() will explode.

关于c# - 在泛型集合之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13353194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com