Когда вы передаете Nullable<T>
в API, который принимает object
, это упаковано , а правила упаковки для Nullable<T>
особые: он вставляется в либо обычный null
или коробку T
, а не коробку T?
; другими словами: object
значение никогда не содержит обнуляемого типа значения. Из-за этого, с точки зрения библиотеки, вы отправили ConsoleColor
, а не ConsoleColor?
, поэтому:
Type Resolver(int fieldNumber)
{
return typeof(ConsoleColor);
}
Однако в качестве побочного примечания: API-интерфейс преобразователя очень Speci c и ниши, и есть обычно более эффективных способов сделать что-то. Если вы скажете мне, что вы пытаетесь достичь , я, вероятно, смогу предложить больше рекомендаций.
(Я пытаюсь понять, существует ли когда-либо a сценарий, в котором преобразователь может осмысленно вернуть typeof(Nullable<T>)
для некоторого T
- мы могли бы , возможно, библиотека просто развернула бы само значение, допускающее значение NULL, или создала более значимое сообщение)