Класс или структура - PullRequest
       0

Класс или структура

3 голосов
/ 07 марта 2011

Как проверить, является ли класс типом или структурой?

 protected   T GetNullValue<T>(IDataReader reader, int ordinalId)
    {
        if (reader.IsDBNull(ordinalId))
        {
            //if T is struct.....
            //else if I is class
        }
        return (T)reader.GetValue(ordinalId);
    }

Ответы [ 3 ]

7 голосов
/ 07 марта 2011
if (default(T) is ValueType)
   ...

- самая эффективная вещь, которую я могу придумать на данный момент.

3 голосов
/ 07 марта 2011

Получите класс Type для объекта и проверьте его.

Type t = reader.GetValue(ordinalId).GetType();
if (t.IsValueType){
    //Struct
} else { 
    //Class
}

Я подозреваю, что вы будете использовать объект Type позже в своем коде, если вы 'пытается динамически обрабатывать результаты.

2 голосов
/ 07 марта 2011

Если T является типом значения, оно не может быть нулевым. Чтобы сделать тип значения обнуляемым, вы должны использовать System.Nullable struct.

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