- Могу ли я преобразовать Span в Span ?
- Могу ли я преобразовать Span в Span?
- Могу ли я преобразовать ReadOnlySpan в ReadOnlySpan?
- Могу ли я преобразовать ReadOnlySpan в ReadOnlySpan< Dog>?
Пример проблемы:
Код: Выделить всё
class Animal { }
class Dog : Animal { }
void Main() {
Dog[] dogs = new Dog[10];
Span dogSpan = dogs.AsSpan(0, 10);
// CS0030 Cannot convert type 'System.Span' to 'System.Span'
Span animalSpan1 = (Span)dogSpan;
// CS0453 The type 'Dog' must be a non-nullable value type in order to use it as parameter 'TFrom' in the generic type or method 'MemoryMarshal.Cast(ReadOnlySpan)'
// CS0453 The type 'Animal' must be a non-nullable value type in order to use it as parameter 'TTo' in the generic type or method 'MemoryMarshal.Cast(ReadOnlySpan)'
Span animalSpan2 = MemoryMarshal.Cast(dogSpan);
}
Я использую ReadOnlySpan для представления диапазонов управляемого массива, доступного только для чтения (скажем, Animal[]). Потребители обрабатывают конкретные реализации Animal (например, GiraffeHandler принимает ReadOnlySpan и обрабатывает его как ReadOnlySpan).
Я знаю альтернативное решение было бы выделить копию массива и создать из него диапазон или выполнять приведение каждый раз, когда я вынимаю элемент из диапазона (возможно, путем обертывания диапазона в ref-структуру), но оба из них уродливы. Я бы предпочел привести фактический Span к Span (или наоборот), если это возможно, или узнать, почему иначе это невозможно.
Подробнее здесь: https://stackoverflow.com/questions/743 ... vice-versa