提问人:DomenPigeon 提问时间:8/16/2023 最后编辑:Peter CsalaDomenPigeon 更新时间:8/16/2023 访问量:58
如何在C#中将ImmutableArray<DerivedClass>转换为ImmutablyArray<BaseClass>反之亦然?
How to cast ImmutableArray<DerivedClass> to ImmutablyArray<BaseClass> and vice versa in C#?
问:
我知道不可能强制转换派生列表(为什么不在这里得到很好的解释),但是 ImmutableArrays 呢,因为它们不能被更改,强制转换应该是有效的,对吧?
我希望这能起作用:
class Animal {}
class Dog : Animal {}
ImmutableArray<Dog> dogs = ImmutableArray.Create<Dog>(new Dog());
ImmutableArray<Animal> animals = (ImmutableArray<Animal>) dogs;
ImmutableArray<Dog> dogsBack = (ImmutableArray<Dog>) animals;
答:
3赞
DomenPigeon
8/16/2023
#1
是的,这是可能的:
ImmutableArray<Dog> dogs = ImmutableArray.Create<Dog>(new Dog());
ImmutableArray<Animal> animals = ImmutableArray<Animal>.CastUp(dogs);
ImmutableArray<Dog> dogsBack = animals.CastArray<Dog>();
请注意,您还可以使用 CastArray
从狗转换为动物,但由于协方差,CastUp
比该方法快得多。CastArray
评论
1赞
Peter Csala
8/16/2023
为什么需要 ? 应该足够了吗?ImmutableArray
CastUp
dogs.CastArray<Animal>()
3赞
Marc Gravell
8/16/2023
@PeterCsala这两种操作都只是将基础数组转换为零拷贝;“足够”表示差异 - 如果有的话,是可取的,因为它利用了已知的协方差运算,而不是使用类型测试的未知盲法;来源,对于好奇的人:github.com/tunnelvisionlabs/dotnet-collections/blob/master/......CastUp
评论
dogs
Animal
Dog
animals