Trong khi học C# khá nhanh, tôi đang vấp phải vấn đề cú pháp Bộ sưu tập này.C# Cú pháp sưu tập hộp danh sách C#
Tôi đã thêm một số đối tượng thuộc loại MyItem của riêng tôi vào danh sách lstData. Bây giờ tôi cần phải tìm kiếm trong listbox này và suy nghĩ của việc sử dụng các ký hiệu LINQ thanh lịch như:
lstData.Items.Where(x => x.Text == SearchString)
nhưng Items của một ListBox không có .Where(), mặc dù tôi đã bổ sung thêm các "sử dụng System.Linq ; " không gian tên.
Vì vậy, tôi đã cố gắng:
foreach (MyItem item in (MyItem)lstData.Items)
nhưng điều này mang đến cho các lỗi xây dựng: Không thể chuyển đổi loại 'System.Windows.Forms.ListBox.ObjectCollection' thành 'MySandbox.frmListboxDemo.MyItem'.
tôi đã quản lý để viết một cái gì đó hoàn toàn khả thi:
for (int i = 0; i < lstData.Items.Count; i++)
{
MyItem item = (MyItem)lstData.Items[i];
if (item.Text == SearchString)
{
lstData.SetSelected(i, true);
break;
}
}
và một phiên bản tương tự như:
var item_enum = lstData.Items.GetEnumerator();
while (item_enum.MoveNext()) { etc etc... }
mà hóa ra là 2 dòng lâu hơn, và không tìm những gì có thể thay thế 'var' .
Tôi không thực sự chắc chắn tôi hiểu cách sử dụng Bộ sưu tập, ObjectCollections, Enumerators vv, nhưng tôi rất mong muốn tìm hiểu. Đặc biệt nếu có thể có phiên bản .Where() và/hoặc tốt hơn.
Cảm ơn mọi câu trả lời của bạn. Tôi đã kết thúc với giải pháp này:
var item_iter = lstData.Items.Cast<MyItem>()
.Where(x => x.Text.Trim().ToLower() == txtItemName.Text);
foreach (MyItem item in item_iter)
{
int i = lstData.Items.IndexOf(item);
lstData.SetSelected(i, true);
break;
}
Tôi không biết nếu điều này là thực sự tốt hơn nhiều so với cách "fortran" (xem ở trên), nhưng nó dạy tôi phương pháp tôi có thể sử dụng trong các truy vấn kháC# C.
sử dụng '.OfType' ... –