2011-10-24 23 views
8

estoy reescribiendo/conversión de parte VB-Code:En C#: ¿Por qué no hay 'Elemento' en System.Data.DataRow?

Dim dt As New System.Data.DataTable() 
Dim dr As System.Data.DataRow = dt.NewRow() 
Dim item = dr.Item("myItem") 

C#:

System.Data.DataTable dt = new System.Data.DataTable(); 
System.Data.DataRow dr = dt.NewRow(); 
var item = dr.Item["myItem"]; 

no puedo hacer que se ejecute en C#, los problemas que tengo es la tercera fila var item = dr.Item["myItem"];:

System.Data.DataRow' does not contain a definition for 'Item' and no extension method 'Item' accepting a first argument of type 'System.Data.DataRow' could be found (are you missing a using directive or an assembly reference?)

que hace referencia System.Data versión 4 en ambos proyectos. ¿Que me estoy perdiendo aqui? Nota: ItemArray existe tanto ...

Respuesta

20

Trate de esta manera:

var item = dr["myItem"]; 

En C#, podrá acceder al indexer property directamente. Y la propiedad DataRow.Item se define como indexador.

+0

Ah, esto es lo que hace falta - Me pregunto por qué hay un comportamiento/sintaxis/estilo diferente en comparación con VB ... – sl3dg3

+2

@ sl3dg3 - si no había diferencias en la sintaxis/estilo/comportamiento entre C# y VB , no serían 2 idiomas diferentes ... –

+0

@Damien_The_Unbeliever: Bueno, en VB tienes la 'paz' de usar ambos, significa que también puedes escribir 'dr (" myItem ")' - gracioso que C# niega el acceso a la propiedad de artículo ... – sl3dg3

1

No hay realmente ninguna propiedad de "Artículo" en C#. En VB el acceso a la celda DataRow se define así:

Public Property Item (
    column As DataColumn 
) As Object 

Así que no es un literal propiedad "artículo". Sin embargo, en C# se define así:

public object this[ 
    DataColumn column 
] { get; set; } 

Así que esta es la propiedad predeterminada de la clase/objeto. Entonces accede a él con el nombre del objeto.

Cuestiones relacionadas