0

我想扩展 System.Data.DataRow 类,所以我做了以下代码(并using在我的类中添加了关键字)

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

但是,当我尝试以下代码ToNullableDate时,Intellisense 中没有显示:

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

我的扩展方法声明中是否缺少任何内容?还是应该只创建一个新类并从 DataRow 类继承?

谢谢

4

2 回答 2

3

你进入using MyExtension代码了吗?此外,扩展位于 DataRow 上,即 d,但您正在 d["Column"] 上查找它。

从您的评论看来,该值似乎为 null,您需要对此进行测试,而不是创建扩展...

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

如果你真的想要一个扩展方法,一种选择是在方法中传递列:

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 回答