ADO.NET Безумие и Nullable Типы - PullRequest
2 голосов
/ 16 мая 2009

Кажется, я спустился в кроличью нору. Я хотел бы преобразовать данные из наборов данных ADO .NET в тип Nullable. Сначала я предполагал, что прямой бросок (int?) Сделает это. Как я был наивен. Неправильно, сильно неправильно. Сейчас я пытаюсь написать универсальный конвертер, но зацикливаюсь на синтаксисе. Это так 2005 - кто-то, должно быть, уже решил эту проблему. Вы?

Зависание состоит в том, что когда я пытаюсь использовать тип Nullable в качестве ограничения на преобразователь, я получаю синтаксическую ошибку:

public class NullableDBConversion
{
  public static T Convert<T>(object testValue) where T : Nullable<T>
  {
    if (testValue is DBNull)
    {
      return new Nullable<T>();
    }

    return new Nullable<T>((T)testValue);
  }
}

Цель состоит в том, чтобы использовать единый метод, который использует дженерики для всех преобразований. Это возможно, или я должен написать несколько.

1 Ответ

7 голосов
/ 16 мая 2009

T : Nullable<T> на самом деле не имеет смысла как ограничение - подумайте о том, каким должно быть T; это не может быть обнуляемо само по себе. Вы могли бы иметь:

where T : Nullable<U> where U : struct

но это было бы несколько неясно. Я думаю, что проще сделать T ненулевым типом и просто обратиться к Nullable<T>. Я думаю, что вы хотите это:

public static Nullable<T> Convert<T>(object testValue) where T : struct
{
    return testValue is DBNull ? null : new Nullable<T>((T)testValue);
}
...