Действительно Выстраивает. ToArray <> () возвращают исходный массив, если это - тот же тип?

Я имею дело с платформой ежедневно, где мы иногда предоставляем методы, которые принимают IEnumerable<MyBusinessObject> в качестве параметра для показа пользовательских интерфейсов, выполните вычисления и т.д.

Если я передаю в массиве MyBusinessObject как так:

MyBusinessObject[] myArray = new MyBusinessObject { obj1, obj2, ..., objN };
frameworkClass.MyMethod(myArray);

....

public class FrameworkClass
{
    public void MyMethod(IEnumerable<MyBusinessObject> objs)
    {
        // Other code that uses the enumerable
        MyBusinessObject[] objectArray = objs.ToArray();            
        // More code that uses the enumerable
    }
}

Делает строку objs.ToArray() просто решите IEnumerable<MyBusinessObject> назад к исходному массиву, или это копирует его в совершенно новый массив, готовый к употреблению?

40
задан Codesleuth 19 January 2010 в 10:39
поделиться

1 ответ

Краткий ответ: Нет.

Немного более длинный ответ: Хотя вы можете собрать воедино части кода здесь и там, которые помогут вам получить большую часть того, что вы хотите в IE6, проблема в том, что ни одна из этих технологий не идеальна (с большинством исправлений PNG - попробуйте использовать прозрачные PNG на фоновом изображении и измените фоновое изображение, изменив класс). Могут быть решения для скругленных углов или теней, но они, вероятно, также будут блестящими.

Многие рамки JavaScript предлагают почти полную поддержку функций JavaScript для IE6, но для CSS это не так. Многие вещи в расширенной CSS (2 и 3) никогда не будут возможны в IE6, но должны быть достигнуты разными способами. Отсутствует свойство content , : hover работает только на тэгах привязки, псевдоселекторы на основе атрибутов не работают.

Даже такие технологии, как GWT, которые легко компилируются в JavaScript для всех браузеров, предлагают условный CSS, чтобы вы могли кодировать свои собственные взломы или изящную деградацию.

-121--4859817-

Существует метод etag setter для объекта ActionController:: Response , который удаляет заголовок HTTP ETag, если он пуст, поэтому необходимо просто очистить его в контроллере (возможно, в предыдущем фильтре):

response.etag = nil
-121--3464991-

Нет, вы всегда получите новую копию массива, хотя объекты в ней не являются копиями, они являются теми же ссылками, что и в исходном массиве.

Изменение возвращаемого массива на иногда влияет на источник, а иногда нет. ToList работает в одном и том же пути по той же причине.


Можно проверить исходный код (начиная с 2015), если требуется просмотреть сведения: Enumerable.ToArray , который, в свою очередь, создает копию элементов (оптимизированную для ICollection и, следовательно, Array [] , но по-прежнему создающую копию) с внутренним классом буфера .

57
ответ дан 27 November 2019 в 01:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: