我有以下VB.net代碼:轉換數據集代碼VB.net到C#
Private Function ReorgFileDataset(ByRef InDataSet As DataSet) As DataSet
Dim _ResultDataRow, _DataRow As DataRow
Dim _ResultDataSet As New DataSet
Dim _ResultDataTable As New DataTable
_ResultDataSet.Tables.Add(_ResultDataTable)
Dim ColumnName, Value As String
Dim FileID As Integer
For Each _DataRow In InDataSet.Tables(0).Rows
ColumnName = _DataRow.Item("FKP_KEYWORD")
If Not _ResultDataTable.Columns.Contains(ColumnName) Then
_ResultDataTable.Columns.Add(ColumnName)
End If
Next
_ResultDataTable.Columns.Add("DATE_SENT")
_ResultDataRow = Nothing
For Each _DataRow In InDataSet.Tables(0).Rows
If FileID <> _DataRow.Item("FD_RID") Then
If Not _ResultDataRow Is Nothing Then
_ResultDataTable.Rows.Add(_ResultDataRow)
End If
FileID = _DataRow.Item("FD_RID")
_ResultDataRow = _ResultDataTable.NewRow()
_ResultDataRow.Item("DATE_SENT") = _DataRow.Item("FD_LASTMODIFIED")
End If
If _DataRow.Item("FKP_KEYWORD").GetType IsNot GetType(DBNull) And _
_DataRow.Item("FKP_VALUE").GetType IsNot GetType(DBNull) Then
ColumnName = _DataRow.Item("FKP_KEYWORD")
Value = _DataRow.Item("FKP_VALUE")
_ResultDataRow.Item(ColumnName) = Value
End If
Next
If _ResultDataRow IsNot Nothing Then
_ResultDataTable.Rows.Add(_ResultDataRow)
End If
Return _ResultDataSet
End Function
當我通過轉換器運行它,我得到這個C#代碼:
private DataSet ReorgFileDataset(DataSet InDataSet)
{
DataRow _ResultDataRow = default(DataRow);
DataSet _ResultDataSet = new DataSet();
DataTable _ResultDataTable = new DataTable();
_ResultDataSet.Tables.Add(_ResultDataTable);
string ColumnName = null;
string Value = null;
int FileID = 0;
foreach (DataRow _DataRow in InDataSet.Tables[0].Rows) {
ColumnName = _DataRow.Item("FKP_KEYWORD");
if (!_ResultDataTable.Columns.Contains(ColumnName)) {
_ResultDataTable.Columns.Add(ColumnName);
}
}
_ResultDataTable.Columns.Add("DATE_SENT");
_ResultDataRow = null;
foreach (DataRow _DataRow in InDataSet.Tables[0].Rows) {
if (FileID != _DataRow.Item("FD_RID")) {
if ((_ResultDataRow != null)) {
_ResultDataTable.Rows.Add(_ResultDataRow);
}
FileID = _DataRow.Item("FD_RID");
_ResultDataRow = _ResultDataTable.NewRow();
_ResultDataRow.Item("DATE_SENT") = _DataRow.Item("FD_LASTMODIFIED");
}
if (!object.ReferenceEquals(_DataRow.Item("FKP_KEYWORD").GetType, typeof(DBNull)) & !object.ReferenceEquals(_DataRow.Item("FKP_VALUE").GetType, typeof(DBNull))) {
ColumnName = _DataRow.Item("FKP_KEYWORD");
Value = _DataRow.Item("FKP_VALUE");
_ResultDataRow.Item(ColumnName) = Value;
}
}
if (_ResultDataRow != null) {
_ResultDataTable.Rows.Add(_ResultDataRow);
}
return _ResultDataSet;
}
我修改InDataSet.Tables(0)
到InDataSet.Tables[0]
但是,有幾個我無法修復的錯誤,因爲intellisence沒有DataRow的Item屬性。我也不確定最後一條語句是否在檢查空值。
我可以在這裏得到一些幫助嗎?
你得到什麼錯誤? 'DataRow.Item'在C#中是一個有效的屬性,就像它在VB.NET中一樣。最後一行等同於VB.NET代碼中的最後一行 - 如果DataRow不爲空,則將其添加到結果中。 'null'是C#VB.NET中的Nothing。 – Tim
Item索引器隱含在C#類型中,所以在VB中如果使用'_DataRow.Item()',則在C#中它將是'_DataRow []'。由於你可以擁有一個名爲'Item'的C#屬性或方法,所以它對轉換器來說是一件非常困難的事情,所以它通常需要安全的道路並將它放在那裏,迫使你修復它們。 –
正如我所說的,DataRow中的NO Item屬性顯示在Intellisense,ONLY ItemArray中。 – MB34