C#中如何实现ImmutableArray<派生类>与ImmutableArray<基类>互转?
为什么ImmutableArray无法直接强制转换为基类型的ImmutableArray?
你提到的强制转换确实无法直接运行,核心原因是ImmutableArray
具体原因
普通可变集合(比如List
正确的转换方式
ImmutableArrayAs<TTarget>(),它会在类型兼容的情况下共享内部数组(因为不可变,无需复制),几乎没有性能开销:
class Animal {} class Dog : Animal {} ImmutableArray<Dog> dogs = ImmutableArray.Create<Dog>(new Dog()); // 向上转换为ImmutableArray<Animal> ImmutableArray<Animal> animals = dogs.As<Animal>(); // 向下转换,需确保类型安全(可通过IsOfType<T>()检查) if (animals.IsOfType<Dog>()) { ImmutableArray<Dog> dogsBack = animals.As<Dog>(); }
如果你的环境不支持As<TTarget>(),也可以用ImmutableArray.CreateRange<TTarget>(dogs),同样能实现转换且共享内部数组。
内容的提问来源于stack exchange,提问作者DomenPigeon
相关产品推荐
相关产品推荐

