0

System.Data.DataRow クラスを拡張したいので、次のコードを作成しました (そしてusing、クラスにキーワードを追加しました)。

namespace MyExtension
{
     public static class DataRowExt
      {
          public static string ToNullableDate(this DataRow dr)
          { return something;}
    }
}

ただし、次のコードを試すと、ToNullableDateIntellisense に表示されません。

DataRow d = new DataRow();
d["Column"].ToNullableDate(); // ToNullableDate does not show up

拡張メソッド ステートメントに欠けているものはありますか? または、新しいクラスを作成して、代わりに DataRow クラスから継承する必要がありますか?

ありがとう

4

2 に答える 2

3

using MyExtensionコードは入っていますか?また、拡張機能は d である DataRow にありますが、d["Column"] で探しています。

あなたのコメントから、値に null が含まれているようです。拡張機能を作成するのではなく、それをテストする必要があります...

 object value = d["Column"];
 if (value == DBNull.Value)
     // do something
 else
     // do something else 

本当に拡張メソッドが必要な場合、1 つのオプションは、メソッドで列を渡すことです。

namespace MyExtension
{
   public static class DataRowExt
   {
       public static string ToNullableDate(this DataRow dr, string Column)
       { return something;}
   }
}

そして、次のように使用します。

d.ToNullableDate("Column");
于 2012-07-09T00:11:38.507 に答える
2

拡張メソッドはd、インデクサーからではなく、オフになります。

参考までに、これを行うことができます:

DataRow d = new DataRow();
d["Column"] as DateTime?;
于 2012-07-09T00:09:19.193 に答える