0

例を見つけましたが、それが何を意味するのか理解できません。

同じコードを使用して DataRow または DataReader から読み取るにはどうすればよいですか?

インターフェイスと 2 つのクラスを C# に変換する方法がわかりません。

編集: C# に変換したいコードは次のとおりです。

Interface IIndexer
    Default ReadOnly Property Item(ByVal index As String)
End Interface

Class DataReaderWrapper
Implements IIndexer

Private ReadOnly _reader As IDataReader

Public Sub New(reader As IDataReader)
    _reader = reader
End Sub

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item
    Get
        Return _reader(index)
    End Get
End Property
End Class

Class DataRowWrapper
Implements IIndexer

Private ReadOnly _row As DataRow

Public Sub New(row As DataRow)
    _row = row
End Sub

Public ReadOnly Property Item(index As String) As Object Implements IIndexer.Item
    Get
        Return _row(index)
    End Get
End Property
End Class
4

2 に答える 2

1

私の知る限り、同等のものはありません。Defaultキーワードの詳細については、MSDN を参照してください。

ここに表示されているのは、 Interface 内の Indexerです。

変換されたコードは次のようになります。

interface IIndexer
{
    object this[string index] { get; }
}

class DataReaderWrapper : IIndexer
{
    private readonly IDataReader _reader;
    public DataReaderWrapper(IDataReader reader)
    {
        _reader = reader;
    }

    public object this[string index]
    {
        get { return _reader[index]; }
    }
}

class DataRowWrapper : IIndexer
{
    private readonly DataRow _row;
    public DataRowWrapper(DataRow row)
    {
        _row = row;
    }

    public object this[string index]
    {
        get { return _row[index]; }
    }
}
于 2013-03-10T14:37:36.790 に答える
0

このようなものは機能しますが、「デフォルトのプロパティ」が何を意味するのかは不明です:

var loadedItems = new List<Item>();
SqlDataReader dr = GetItemsDataReader();
while(dr.Read()){
  Item item = GetItemFromData(dr);
  loadedItems.Add(item);
}

private Item GetItemFromData(SqlDataReader dr){
  var loadedItem = new Item();
  loadedItem.ID = dr["ID"];
  loadedItem.Name = dr["Name"];
  'etc., etc.'
  Return loadedItem
}
于 2013-03-10T14:26:00.220 に答える