Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何扩展DataRow类_C#_Extension Methods_Nullable_Datarow - Fatal编程技术网

C# 如何扩展DataRow类

C# 如何扩展DataRow类,c#,extension-methods,nullable,datarow,C#,Extension Methods,Nullable,Datarow,我想扩展System.Data.DataRow类,因此我编写了以下代码(并在我的类中使用关键字添加了) 但是,当我尝试以下代码时,ToNullableDate不会在Intellisense中显示: DataRow d = new DataRow(); d["Column"].ToNullableDate(); // ToNullableDate does not show up 我的扩展方法语句中是否缺少任何内容?或者我应该创建一个新类并从DataRow类继承吗 谢谢扩展方法将关闭,d,而不是

我想扩展System.Data.DataRow类,因此我编写了以下代码(并在我的类中使用关键字添加了

但是,当我尝试以下代码时,
ToNullableDate
不会在Intellisense中显示:

DataRow d = new DataRow();
d["Column"].ToNullableDate(); // ToNullableDate does not show up
我的扩展方法语句中是否缺少任何内容?或者我应该创建一个新类并从DataRow类继承吗


谢谢

扩展方法将关闭,
d
,而不是关闭索引器

仅供参考,您可以这样做:

DataRow d = new DataRow();
d["Column"] as DateTime?;

扩展方法将关闭,
d
,而不是关闭索引器

仅供参考,您可以这样做:

DataRow d = new DataRow();
d["Column"] as DateTime?;

代码中是否有使用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");

代码中是否有使用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");

好的,那么我可以扩展索引器吗?@Devmonster-它返回
对象
,但我不建议扩展它。您是否建议我继承DataRow类?实际上,我的问题是外部代码返回的datetime值为null。我的朋友说,将我的变量声明为
DateTime?
仍然会返回异常“从DBNull转换为其他类型”。有什么推荐的解决方法吗?我已经用
作为
操作符来处理了。它适合我。你能在Linq语句中使用它吗?好的,那么我可以扩展索引器吗?@Devmonster-它返回
对象
,但我不建议扩展它。Yikes。您是否建议我继承DataRow类?实际上,我的问题是外部代码返回的datetime值为null。我的朋友说,将我的变量声明为
DateTime?
仍然会返回异常“从DBNull转换为其他类型”。有什么推荐的解决方法吗?我已经用
作为
操作符来处理了。它对我很有用。你能在Linq语句中使用它吗?是的,我的类中有
using
关键字(在我的帖子中提到)。我想我的问题是如何扩展d[“列]部分。是的,这正是我想要做的。但是,这是Linq语句的一部分。所以我需要检查datarow值是否为null。我还没有Linq方面的经验,我不知道是否有办法将
if
语句添加到Linq赋值中谢谢!这是我在发布问题之前做的。这也很有效,b丹尼尔的建议也很有效。是的,我在课堂上使用了
关键字(在我的帖子中提到)。我想我的问题是如何扩展d[“Column]部分。是的,这正是我想要做的。但是,这是Linq声明的一部分。所以我需要检查datarow值是否为null。我还没有Linq方面的经验,我不知道是否有办法在Linq分配中添加
if
语句谢谢!这就是我在发布问题前做的。这也行,但丹尼尔的建议也行。