2011-10-24 18 views
8

Tôi đang viết lại/chuyển đổi một số VB-Code:Trong C#: Tại sao không có 'Item' trên 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"]; 

tôi không thể làm cho nó chạy theo C#, những vấn đề tôi có là hàng thứ ba 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?)

Tôi tham chiếu System.Data Phiên bản 4 trong cả hai dự án. Tôi đang thiếu gì ở đây? Lưu ý: ItemArray tồn tại trong cả hai ...

Trả lời

20

Hãy thử như thế này:

var item = dr["myItem"]; 

Trong C# bạn có thể truy cập trực tiếp indexer property. Và thuộc tính DataRow.Item được định nghĩa là chỉ mục.

+0

Ah, điều này không phải là mẹo - tôi tự hỏi tại sao có một hành vi/cú pháp/kiểu khác so với VB ... – sl3dg3

+2

@ sl3dg3 - nếu không có sự khác biệt về cú pháp/kiểu/hành vi giữa C# và VB , họ sẽ không phải là 2 ngôn ngữ khác nhau ... –

+0

@Damien_The_Unbeliever: Vâng, trong VB bạn có 'hòa bình' sử dụng cả hai, có nghĩa là bạn cũng có thể viết 'dr (" myItem ")' - vui mà C# từ chối truy cập đối với hạng mục tài sản ... – sl3dg3

1

Thực sự không có thuộc tính "Mục" trong C#. Trong VB, truy nhập DataRow được định nghĩa như sau:

Public Property Item (
    column As DataColumn 
) As Object 

Vì vậy, có một thuộc tính "Mục" theo nghĩa đen. Tuy nhiên trong C# nó được định nghĩa như sau:

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

Vì vậy, đây là thuộc tính mặc định của lớp/đối tượng. Vì vậy, bạn truy cập nó với tên đối tượng.

Các vấn đề liên quan