新しいジェネリックパラメータAPIには確かに問題があります-通常の.NETnull
を受け入れる必要があります (DBNull.Value
ではありません )、この問題
を開きました これを追跡するために、4.0.3で修正される予定です。
ドキュメントノート
として つまり、汎用APIの要点は、Value
の使用を避けることです。 タイプobject
のプロパティ 。一般的なNpgsqlParameter<int>
を使用する場合 ただし、Value
を割り当てます 、intはボックス化され、APIの目的を無効にします。 TypedValue
に割り当てる必要があります 、タイプはint
箱に入れません。これが、DBNull.Value
を割り当てることができない理由でもあります。 null値を示します(これは別の.NETタイプです)。
この新しい汎用APIを使用する必要があるかどうかに関する注意事項:
- 多くの値型を記述している場合(例:
int
、DateTime
...)これにより、すべてのボクシングの割り当てが削除されます。これが重要になるかどうかは、アプリケーションによって異なります。プロファイルは慎重に検討してください。 - 一般的なジェネリックAPIは、コンパイル時にタイプがわかっている場合は、非ジェネリックAPIよりも常に優先されます。これにより、コンパイラは型の正しさを早期にチェックし、コードをより明確にすることができます。
List<string>
を使用します。ArrayList
ではなく パフォーマンスが問題ではない場合でも、適切なコーディングの問題として - 汎用APIの主な(唯一の?)欠点は、Npgsql固有であり、コードを他のデータベースドライバーに移植できないことです(ただし、問題が存在します これ(または同様のもの)をADO.NETの一部にするため)。