Общая структура — расположение полей в зависимости от универсального типа.C#

Место общения программистов C#
Ответить
Anonymous
 Общая структура — расположение полей в зависимости от универсального типа.

Сообщение Anonymous »

Я хочу реализовать структуру, эквивалентную Nullable, которая совместима как с типами значений, так и с типами ссылок.
В идеале
  • Для типов значений я бы хотел, чтобы он действовал так же, как Nullable, с частным логическим полем, указывающим наличие значения.
  • Для типов ссылок само значение, нулевое или ненулевое, должно указывать на наличие значения.
Чтобы избежать ненужных накладных расходов, я бы в идеале расположение полей этой структуры должно зависеть от того, является ли универсальный тип типом значения или нет:

Код: Выделить всё

readonly struct Option
{
private readonly T _value;

#if typeof(T).IsValueType // Pseudo-code of course
private readonly bool _hasValue; // Only needed if T is a value type; otherwise, should not be part of the struct layout
#endif

public bool HasValue
{
if(typeof(T).IsValueType)
return _hasValue;
return _value is not null;
}

// ....
}
Можно ли это как-нибудь сделать? Красиво или даже каким-то неприятным отражением/излучением IL/каким еще способом? К сожалению, он должен быть частью одного и того же типа, поэтому использование отдельных ValueOption и RefOption будет невозможно.
Если нет, может ли кто-нибудь придумать альтернативную идею для представления как необязательных типов ссылок, так и типов значений, без больших накладных расходов для типов ссылок?


Подробнее здесь: https://stackoverflow.com/questions/783 ... neric-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»