Задать вопрос
Casper-SC
@Casper-SC
Программист (.NET)

Исходники .NET. разве это не признак плохого кода, что я приведу в теме?

https://referencesource.microsoft.com/#System.Core...

Вот, к примеру, там есть много обращений к массиву по индексу, чтобы получить доступ к полям оного и того же объекта.
m_slots[index].hashCode = hashCode;
m_slots[index].value = value;
m_slots[index].next = m_buckets[bucket] - 1;


Добавил позже:
Возможно, если в качестве T будет Value Type, то мы можем скопировать значение из массива и не присвоить ничего значению в массиве?

Добавил позже:
Ну в таком случае, сначала получаем копию из массива, над ней работаем, а потом присваиваем обратно по нужному индексу изменённую копию. За то избавляемся от кучи обращений через индексатор.

Добавил позже:
Ну да, как я и думал
using System;

namespace TestValueType
{
    class Program
    {
        #region Entry point

        private static Program _program;

        private static void Main(string[] args)
        {
            _program = new Program();
            _program.Run(args);
        }

        #endregion

        private void Run(string[] args)
        {
            _slots = new Slot[]
            {
                new Slot { hashCode = 1, value = 10 },
                new Slot { hashCode = 2, value = 20 },
                new Slot { hashCode = 3, value = 30 },
                new Slot { hashCode = 4, value = 40 },
            };

            //_slots[0].value = 70;

            Slot slot = _slots[0];
            slot.value = 70;
            
            Display(_slots[0]);

            Console.ReadKey();
        }

        private void Display(Slot slot)
        {
            Console.WriteLine(slot.ToString());
        }

        private Slot[] _slots;

        internal struct Slot
        {
            internal int hashCode;      // Lower 31 bits of hash code, -1 if unused
            internal int value;

            /// <summary>
            /// Возвращает полное имя типа этого экземпляра.
            /// </summary>
            /// <returns>
            /// Объект типа <see cref="T:System.String"/>, содержащий полное имя типа.
            /// </returns>
            public override string ToString()
            {
                return $"hashCode = {hashCode}, value = {value}";
            }
        }
    }
}
  • Вопрос задан
  • 462 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GreyPhantom
АСУТП, КИПиА
сначала получаем копию из массива, над ней работаем, а потом присваиваем обратно по нужному индексу изменённую копию. За то избавляемся от кучи обращений через индексатор.
"Памяти много не бывает", помните? Зачем создавать копию элемента массива, когда можно читать напрямую из массива? Чем плохо обращение по индексу?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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