【问题标题】:Converting Dataset code VB.net to C#将数据集代码 VB.net 转换为 C#
【发布时间】:2019-01-14 03:14:44
【问题描述】:

我有以下 VB.net 代码:

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] 但是,由于智能没有DataRow 的Item 属性,有几个错误我无法修复。我也不确定检查 Null 的最后一个 if 语句。

我可以在这里寻求帮助吗?

【问题讨论】:

  • 您遇到了什么错误? DataRow.Item 是 C# 中的有效属性,就像它在 VB.NET 中一样。最后一行相当于 VB.NET 代码中的最后一行 - 如果 DataRow 不为空,则将其添加到结果中。 null 对于 C# 就像 Nothing 对于 VB.NET。
  • 项目索引器隐含在 C# 类型中,因此在 VB 中如果您使用 _DataRow.Item(),在 C# 中它将是 _DataRow[]。对于转换器来说,这是一件很难接受的事情,因为您可以拥有一个名为 Item 的 C# 属性或方法,因此它通常会走安全的道路并将其放在那里迫使您修复它们。
  • 正如我所说,DataRow 中没有 Item 属性显示在 Intellisense 中,只有 ItemArray。
  • C# 将Item(string)Item(int) 更改为[string][int],它不会在Intellisense 中显示,因为它不存在。它显示在 MSDN 上,因为它在 VB 中。您需要将_DataRow.Item("") 调用更改为_DataRow[""]

标签: c# vb.net


【解决方案1】:

这里的这个 SO 帖子几乎是重复的......

In C#: Why no 'Item' on System.Data.DataRow?

更具体地说,您可以使用索引器访问数据行的列。比如你有这行代码...

ColumnName = _DataRow.Item("FKP_KEYWORD");

你可以改成这样...

ColumnName = _DataRow["FKP_KEYWORD"].ToString();

【讨论】:

  • 关于 Null 值的最后一部分仍然没有答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2011-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-26
相关资源
最近更新 更多