Как создать Nullable <T>из переменной типа? - PullRequest
3 голосов
/ 16 августа 2011

Я работаю с выражениями, и мне нужен метод, который получает объект некоторого типа (в настоящее время неизвестен). Примерно так:

public static void Foobar(object Meh) { }

Мне нужно, чтобы этот метод возвращал Nullable<T> версию Meh, но тип T относится к Meh.GetType(). Таким образом, возвращаемое значение будет Nullable<MehType>, где MehType - это тип Meh.

Есть идеи или предложения?

Спасибо

Обновление: причина, по которой я нуждался в этом, из-за этого исключения:

Бинарный оператор Equal не определен для типов 'System.Nullable`1 [System.Int32]' и 'System.Int32'.

return Expression.Equal(leftExpr, rightExpr);

, где leftExpr - это System.Nullable1[[System.Int32, а rightExpr - это System.Int32.

Ответы [ 2 ]

3 голосов
/ 16 августа 2011

Если вы не знаете тип во время компиляции, единственный способ выразить его как object - и как только вы укажете тип значения, допускающий пустое значение, вы получите либо нулевую ссылку, либо в штучной упаковке ненулевой тип значения.

Таким образом, эти фрагменты точно эквивалентны с точки зрения результатов:

int? nullable = 3;
object result = nullable;

int nonNullable = 3;
object result = nonNullable;

Другими словами, яне думайте, что вы действительно можете выразить то, что вы пытаетесь сделать.

2 голосов
/ 16 августа 2011

Нужно ли использовать Meh.GetType() вместо универсального? Как насчет этого?

public static Nullable<T> Foobar<T>(T Meh) where T : struct { }

Я делаю предположение, что «некоторый тип» не означает «любой тип», потому что решение выше будет работать только с типами значений.

...