Конвертация универсального типа <T> в Nullable<T>?

207
09 февраля 2018, 17:39

Как из метода GetValue() возвратить значение типа Nullable .

При этом я хотел бы обеспечить возможность передавать в качестве универсального типа <T> как типы значений, так и ссылочные типы.

Упрощенный пример, отражающий суть проблемы:

class DataStructure <T>
{
   private T Value { get; set; }
   Nullable<T> GetValue()
   {
       // В данном методе нужно из не Nullable Т-типа получить Nullable<T>
       // Приведенный ниже способ VisualStudio подчеркивает как ошибку.
       return this.Value as T?;
   }
}

использование метода Convert.ChangeType() задачу также решить не помогло:

class DataStructure <T>
{
   private T Value { get; set; }
   Nullable<T> GetValue()
   {           
       // Приведенный ниже способ VisualStudio подчеркивает как ошибку.
       return (T?)Convert.ChangeType(value, typeof(T?));
   }
}
Answer 1

Nullable<T> имеет смысл только для структур. Вам нужно добавить ограничение на T:

class DataStructure<T> where T: struct

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

Nullable<T> GetValue()
{
    return Value;
}

А использовать Nullable<T> для ссылочных типов T невозможно.

READ ALSO
Передача параметров в функцию BitConverter.ToUInt32

Передача параметров в функцию BitConverter.ToUInt32

Очень глупый, скорее всего, вопрос

227
C# - Обсуфикация в динамической компиляции

C# - Обсуфикация в динамической компиляции

Здравствуйте, собственно интересует каким образом можно зашифровать, обсуфицировать программу которая создается в динамической компиляции

193
Навигация в Xamarin MvvMCross

Навигация в Xamarin MvvMCross

Есть две ViewModel, first и secondВ первой по ShowViewModel вызываем вторую

192