Я пытаюсь проверить, была ли переменная определена как обнуляемый Guid. например.
Dim myGuid As Nullable(Of Guid)
или Dim myGuid As Guid?
Кажется, выполнение myGuid.GetType
возвращает базовый тип , то есть тип Guid, а не Guid ?. Таким образом, проверка myGuid.GetType Is GetType(Guid?)
всегда возвращает False.
Как узнать, является ли myGuid обнуляемым типом?
Ред .: Я могу сделать следующее, что правильно возвращает True для "Guid?" и False для "Guid":
Not Nullable.GetUnderlyingType(GetType(Guid?)) Is Nothing
Проблема в том, что я не знаю, как извлечь обнуляемый тип из самой переменной, чтобы протестировать ее. Мне удалось получить только базовый (не обнуляемый) тип системы.
Ред .: Объяснение, почему мне нужно знать. :)
Я написал вспомогательную функцию БД. Я передаю ему объект, состоящий из открытых членов, представляющих данные строки таблицы. Членами являются столбцы таблицы.
Используя отражение, я зацикливаюсь на этих открытых членах, чтобы создать оператор INSERT для объекта команды и заполнить его параметры значениями в этих членах. Пока все хорошо.
Но теперь есть таблица, в которой есть столбец uniqueidentifier, который я должен не заполнять из объекта строки, поскольку по умолчанию он равен "NEWID ()" (с использованием SQL Server 2008). Вместо того, чтобы пропустить все столбцы Guid, что было бы легко, я хочу пропустить только те, которые определены в классе данных строки как «Guid» (не обнуляемый).
В основном, я использую Guid? (Обнуляемый) тип, чтобы указать, что можно заполнить этот столбец uniqueidentifier данными. Если это не обнуляемое значение, это говорит мне, чтобы пропустить это, потому что у столбца есть значение по умолчанию NEWID ().
Надеюсь, это имеет смысл. Если бы я мог лучше знать, какие столбцы-указатели пропустить, а какие заполнить, я бы хотел знать. Это просто подход, который я считал выполнимым.