2

うさぎの穴に落ちてしまったようです。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);
  }
}

目標には、ジェネリックを使用してすべての変換を行う単一のメソッドがあります。これは可能ですか、それともいくつか書く必要がありますか。

4

1 に答える 1

7

T : Nullable<T>制約としてはあまり意味がありません - 何Tが必要かを考えてください。それ自体を null 許容にすることはできません。あなたが持つことができます:

where T : Nullable<U> where U : struct

しかし、それはややあいまいです。Tnull 非許容型にして参照するだけの方が簡単だと思いますNullable<T>。私はあなたがこれを望んでいると思います:

public static Nullable<T> Convert<T>(object testValue) where T : struct
{
    return testValue is DBNull ? null : new Nullable<T>((T)testValue);
}
于 2009-05-15T21:03:04.877 に答える