لماذا لا يمكنني فعل foreach (var item في datatable.rows)؟
سؤال
هل هناك سبب لعدم تمكني من القيام بما يلي:
foreach (var Item in DataTable.Rows) {
بدلا من الاضطرار إلى القيام به
foreach (DataRow Item in DataTable.Rows) {
كنت أعتقد أن هذا ممكن ، كما هو الحال في أنواع البيانات الأخرى. علي سبيل المثال:
foreach (var Employee in Staff) { // string[] Staff etc...
عندما أحاول أول حلقة foreach ، أحصل على الخطأ CS0021: لا يمكن تطبيق الفهرسة مع [] على تعبير عن "كائن".
لماذا لا يستطيع المترجم معرفة أن .Rows يعيد مجموعات من Datarows؟
المحلول
Rows
عوائد فعالة IEnumerable
(DataRowCollection
) ، لذلك يمكن للمترجم فقط اختيار object
كنوع ل var
. يستخدم Rows.Cast<DataRow>
إذا كنت تريد استخدام var
.
Cast
يتم تعريفه على التعداد, ، لذلك عليك تضمين system.linq.
نصائح أخرى
براين محق تمامًا في سبب ذلك ، ولكن هناك طريقة أبسط لتجنب ذلك: استخدام datatableStensions.Asenumerable ():
foreach (var row in DataTable.AsEnumerable())
{
...
}
لا تنتمي إلى StackOverflow