#c# #generics
#c# #общие
Вопрос:
Предположим, что у меня есть структура данных (скажем, стек), которая использует массив для хранения элементов.
Что-то вроде этого
class Stack<T>
{
private T[] _items;
int Size {get; set; }
// irrelevant code
T pop()
{
// Some condition checking
--Size;
T result = _items[Size];
_items[Size] = null; // Needed if T is a reference type and we want to reclaim the
// memory, however will not
// compile, since T is not necessarily a reference type
return resu<
}
// Irrelevant
}
Мой вопрос, можно ли сделать _items[Size] = null условным, в зависимости от типа T. Если да, то как это делается?
Комментарии:
1. я думаю, вы хотите, чтобы это было причиной того, что вы не можете применять
null
к структурам, и у вас нет общего ограничения на T, в этом случае я бы попытался установить его наdefault
2. может быть
_items[Size] = default
Ответ №1:
_items[Size] = default(T);
Должно работать для всех типов, будь то ссылочные или типы значений.
Комментарии:
1. Вы можете использовать C # 7.1
default
. Сохраните себе 3 символа!2. Это правда, но я не знаю, использует ли OP 7.1 или выше.
3. Мне было интересно, возможно ли это сделать, если я хочу, чтобы мой код был безопасным для null. если T является ссылкой, то _items[Size] = default будет равно null . Если я рассматриваю предупреждения как ошибки и CS8601, то код не будет компилироваться. Что можно было бы обойти в этом случае?