質問: 私は自分のSQLiteデータベースにヌル可能な二重列を持っています。 データベースから読み込むとき(double型のカラムの場合)、nullを "double.NaN"に変換したいと思います。 現在、dapperはnull値を0に設定しますが、これは嫌です。 私の選択肢は何ですか? 1. Dapperソースコードを変更します。 2. Dapperを使用することはできません。独自のADO.NETコードを旧式の方法で記述する必要がありますか? 3. cnn.Queryメソッドを呼び出す方法を変更して、マッピングの方法を変更します。 私の最初の選択肢はオプション1ですが、私はDapperの修正を助ける必要があります。
回答: 個人的には、私はこれに反対することを勧めます。 nullはNaNと全く同じではありません。本当にこれをやりたければ、 `GetTypeDeserializer`を調べる必要があります。これを行うコードは、 `ILGenerator`を使用して動的に生成され、かなり複雑です。あなたが行を探す場合: ``` il.MarkLabel(isDbNullLabel); // incoming stack: [target][target][value] ``` これは、 `DbNull`が検出された場合にコードが分岐する`DbNull`です。現在のところ、スタックから2つの値(値とターゲット)をポップし、床にドロップして実行します。特別なケースとして`float` / `double`をチェックし、変換を適用してからNaNをメンバーに割り当てる必要があります。 しかし、私はこれが単に有効なことではないという主張を繰り返す。はるかに単純なオプションがあります: ``` public double? Value {get;set;} ``` これは変更を必要とせず、現在は機能します。あなたが本当に本当に望むなら、それはnullを許さないdoubleとして扱われます。 ``` private double foo = double.NaN; public double Foo { get { return foo; } set { foo = value; } } ``` これはデフォルトで`NaN`になり、値がある場合は正しくマテリア`NaN`れます。