Ваши коллеги любят List, а вы желаете окунуться в мир Span? Выход есть!
List list = [1, 2, 3, 4, 5];
var span = CollectionsMarshal.AsSpan(list);
Ваши коллеги любят Dictionary, а вы, в тайне от них, мечтаете пощупать механику работы с ref? Выход есть снова!
var dic = new Dictionary
{
{ 1, 1 },
{ 2, 2 }
};
ref var value = ref CollectionsMarshal.GetValueRefOrNullRef(dic, 2);
if (!Unsafe.IsNullRef(ref value)) value = 2222;
Console.WriteLine(dic[2]);
Вам надоело передавать структуры через Nullable и вы мечтаете быть модным и шелковистым? Опять выход рядом! Обратите внимание на конструкцию Unsafe.IsNullRef(ref value) из предыдущего кода. Если в словарик передать не существующий ключ, то он сделает return ref Unsafe.NullRef(). Этот результат очень удобно проверять на null.
Короче говоря, если кто не знал, есть такой интересный класс CollectionsMarshal. Иногда помогает делать странное. Например, достучаться до внутренних массивов BCL-коллекций и работать с ними, когда вам нужны ссылки на элементы.
#память
List list = [1, 2, 3, 4, 5];
var span = CollectionsMarshal.AsSpan(list);
Ваши коллеги любят Dictionary, а вы, в тайне от них, мечтаете пощупать механику работы с ref? Выход есть снова!
var dic = new Dictionary
{
{ 1, 1 },
{ 2, 2 }
};
ref var value = ref CollectionsMarshal.GetValueRefOrNullRef(dic, 2);
if (!Unsafe.IsNullRef(ref value)) value = 2222;
Console.WriteLine(dic[2]);
Вам надоело передавать структуры через Nullable и вы мечтаете быть модным и шелковистым? Опять выход рядом! Обратите внимание на конструкцию Unsafe.IsNullRef(ref value) из предыдущего кода. Если в словарик передать не существующий ключ, то он сделает return ref Unsafe.NullRef(). Этот результат очень удобно проверять на null.
Короче говоря, если кто не знал, есть такой интересный класс CollectionsMarshal. Иногда помогает делать странное. Например, достучаться до внутренних массивов BCL-коллекций и работать с ними, когда вам нужны ссылки на элементы.
#память