Tôi có một cảm giác khủng khiếp, điều này có thể làm giảm tình trạng của tôi đối với tình huống giả tạo, rừng cây, và nếu đó là trường hợp, trước tiên là mea culpa. Nhưng đối với cuộc sống của tôi Tôi chỉ không hiểu tại sao dòng sau sẽ không biên dịch trong C#, giả sử myRegEx
là một đối tượng RegEx
và myString
là mục tiêu cho một cuộc gọi đến các phương pháp Match
, như sau:Tại sao tôi không thể gọi Chọn() từ đối tượng CaptureCollection?
String[] results = myRegEx.Matches(myString)[0].Groups["Group1"].Captures.Select(x => x.Value).ToArray<String>();
Tham chiếu .Captures
sẽ đưa tôi đến số CaptureCollection
, thực hiện IEnumerable
và IEnumerable
cung cấp phương thức mở rộng Select
cho phép biến đổi như tôi đã cố gắng ở đây, snagging tài sản Value
cho mỗi mục trong bộ sưu tập và đẩy nó vào một mảng chuỗi.
Tuy nhiên, trình biên dịch sủa tôi với
'System.Text.RegularExpressions.CaptureCollection không chứa một định nghĩa cho 'Chọn' và không có phương pháp mở rộng 'Chọn' chấp nhận một đối số đầu tiên loại System.Text.RegularExpression.CaptureCollection 'có thể được tìm thấy.
tôi có thể khắc phục điều này bằng cách gọi phương pháp .Cast<Capture>()
từ đối tượng chụp, và sau đó gọi chọn với một biến đổi đó, đến lượt mình, truy cập vào Value
bất động sản, nhưng điều đó dường như một chút ngớ ngẩn xem xét các đối tượng đã làCapture
đối tượng.
Tôi đang làm gì sai? Rất cám ơn trước đã chỉ ra những gì phải là một sự giám sát rõ ràng đau đớn về phía tôi.
Bạn không làm điều gì sai trái. MatchCollection và CaptureCollection chỉ thực hiện 'IEnumerable' không phải là' IEnumerable ' –
AAAAARRRRRGGGHHH !!!!!!!! Tất nhiên. Cảm ơn bạn. Đăng câu trả lời đó và tôi sẽ rất vui khi được chấp nhận. –