Воспользуйтесь этим очень простым методом
Код: Выделить всё
public static Int32? GetNullableInt32(Int32 num)
{
return new Nullable(num);
}
Код: Выделить всё
public static void WorksAsAdvertised()
{
dynamic thisIsAnInt32 = 42;
//Explicitly defined type (no problems)
Int32? shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32);
Console.Write(shouldBeNullableInt32.HasValue);
}
Код: Выделить всё
public static void BlowsUpAtRuntime()
{
dynamic thisIsAnInt32 = 42;
//Now I'm a dynamic{int}... WTF!!!
var shouldBeNullableInt32 = GetNullableInt32(thisIsAnInt32);
//Throws a RuntimeBinderException
Console.Write(shouldBeNullableInt32.HasValue);
}
Мне было бы ОЧЕНЬ любопытно услышать мнение кого-нибудь, кто действительно может объяснить, что происходит (а не просто догадываться).
Два вопроса
- Почему долженBeNullableInt32 получить неявно типизированный как динамический, когда возвращаемый тип GetNullableInt32 явно возвращает Nullable?
- Почему базовый Nullable не сохраняется? Почему вместо этого используется динамический{int}? (Ответ здесь: C# 4: Dynamic and Nullable)
ОБНОВЛЕНИЕ
И ответ Рика Сладки, и ответ Эрика Липперта одинаково действительны. Пожалуйста, прочитайте их оба
Подробнее здесь: https://stackoverflow.com/questions/743 ... nd-dynamic
Мобильная версия