2010-02-02 45 views
10

Tôi đã nhận thấy điều gì đó kỳ lạ với LINQ và phương pháp Chứa. Dường như bị nhầm lẫn trong đó Chứa phương pháp để gọi.LINQ chứa sự nhầm lẫn

if (myString.Contains(strVar, StringComparison.OrdinalIgnoreCase)) 
{ 
    // Code here     
} 

Đoạn mã trên không biên dịch với các lỗi sau:

Những lập luận kiểu cho phương pháp 'System.Linq.Enumerable.Contains (System.Collections.Generic.IEnumerable, TSource, System.Collections .Generic.IEqualityComparer) 'không thể suy ra từ việc sử dụng. Hãy thử xác định các đối số kiểu một cách rõ ràng.

Nếu tôi loại bỏ câu lệnh linq bằng cách sử dụng, vui lòng chứa (nhưng phanh tất cả mã LINQ).

Cú pháp chính xác để trình biên dịch là gì tôi muốn sử dụng phương thức String.Contains chứ không phải LINQ?

Cheers

+7

rằng tiêu đề thú vị hơn khi bạn đọc nó sai. –

+0

Ha Ha đúng. Tôi đoán có nhiều sự khôn ngoan trong tiêu đề hơn là câu hỏi. – Magpie

Trả lời

7

Đây là vì không có String.Contains(string, StringComparison) phương pháp quy định tại các BCL và trình biên dịch cố gắng sử dụng một phương pháp mở rộng. Chỉ có phương thức String.Contains(string) được xác định.

+0

Lol, chúc mừng. Có thể đã thề là nó. – Magpie

1

Nó có thể là do các phương pháp string.Contains chỉ mất một tham số (một string, không có tình trạng quá tải của string.Contains mà phải mất một giá trị StringComparison), trong khi các phương pháp Enumarable.Contains mở rộng phải mất hai. Tuy nhiên, các tham số mà bạn cung cấp không phù hợp với kiểu đầu vào mong đợi, do đó trình biên dịch bị nhầm lẫn.

0

Như Darin Dimitrov nói, String.Contains(string, StringComparison) không tồn tại như một phương pháp để loại String.

System.Linq.Enumerable tuy nhiên có chứa chữ ký như vậy. Và string cũng là một IEnumerable<char>, đó là lý do tại sao trình biên dịch bị nhầm lẫn. Bạn thực sự sẽ có thể tận dụng LINQ và biên dịch nếu bạn thay thế StringCompar- Ison với một ICompar- er của Char:

if (myString.Contains(strVar, Comparer<Char>.Default)) 
{ 
    // Code here     
} 
+1

chuỗi là một 'IEnumerable ' –

+0

Điều này sẽ không hoạt động. 'chuỗi' không thực hiện' IEnumerable '. – jason

+0

xin lỗi, có, f1x0red – herzmeister