2012-07-09 81 views
0

我想擴展的System.Data.DataRow類,所以我做了下面的代碼(並加入班裏using關鍵字)如何擴展一個DataRow類

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

然而,當我嘗試下面的代碼中,ToNullableDate不會在智能感知顯示:

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

是否有遺漏我的擴展方法聲明?或者我應該創建一個新的類,並從DataRow類繼承?

感謝

回答

2

擴展方法將是關,d,不脫的索引器。

僅供參考,你可以這樣做:

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

好了,所以我可以內線結束索引器呢? – Devmonster 2012-07-09 00:11:19

+2

@Devmonster - 它返回Object,但我不會建議擴展它。 – 2012-07-09 00:11:48

+0

哎呀。你會建議我繼承DataRow類嗎?實際上,我的問題是外部代碼返回datetime值的空值。我的朋友說我的變量聲明爲'DateTime?'仍然返回異常'從DBNull轉換爲其他類型'。任何推薦的解決方法? – Devmonster 2012-07-09 00:15:09

3

你有代碼using MyExtension?此外,擴展名是DataRow,它是d,但您正在d [「Column」]上查找它。

從您的意見似乎值中有空,你需要測試,與其創建一個擴展...

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"); 
+0

是的,我在我的課堂上有'using'關鍵字(在我的文章中提到過)。 我想我的問題是如何擴展d [「Column」]部分 – Devmonster 2012-07-09 00:16:05

+0

是的,這正是我想要做的,但這是Linq語句的一部分,因此我需要檢查數據行值是否爲null我還沒有Linq的經驗,我不知道是否有一種方法來添加if語句到Linq任務 – Devmonster 2012-07-09 00:22:12

+0

謝謝!這是我在發佈我的問題之前不久做的。 ,但丹尼爾的建議也起作用。 – Devmonster 2012-07-09 00:40:10