Mục tiêu của tôi là sử dụng truy vấn LINQ Where
trên bộ sưu tập ConfigurationManager.ConnectionStrings
trong ứng dụng bảng điều khiển (giả sử ứng dụng bảng điều khiển .NET 4.5 mới có tham chiếu System.Configuration được thêm vào và tuyên bố using
sửa đổi).Sử dụng LINQ Nơi truy vấn chỉ nhận được một số ConfigurationManager.ConnectionStrings
tôi bắt đầu với điều này, mà không không việc:
var relevantSettings =
ConfigurationManager.ConnectionStrings.Where(s => s.Name.StartsWith("Xyz"));
Nó nói với tôi rằng:
The type arguments for method '
IEnumerable<TSource> System.Linq.Enumerable.Where<TSource(this IEnumerable<TSource>, Func<TSource,bool>)
' cannot be inferred from the usage. Try specifying the arguments explicitly.
này bắt tôi mất cảnh giác, vì vậy tôi cố gắng này để kiểm tra của tôi sanity, nhưng điều này không không hoạt động hoặc:
foreach (var settingsin ConfigurationManager.ConnectionStrings)
{
if (settings.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}
Nó phàn nàn không về báo cáo kết quả foreach
, nhưng về các bit .Name
, với các lỗi:
Could not resolve symbol 'Name'
Tôi hiểu rằng có lẽ một cái gì đó ngăn chặn các trình biên dịch suy luận kiểu 's var
, để kiểm tra kỹ Tôi đã thử điều này mà không làm việc:
foreach (ConnectionStringSettings settings in ConfigurationManager.ConnectionStrings)
{
if (connectionString.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}
Tuy nhiên, điều đó không giúp ích gì cho tôi nhiều, ngoại trừ việc giải quyết vấn đề trước mắt của tôi. Tôi muốn hiểu những gì đang diễn ra ở đây.
Tất cả những gì tôi muốn làm là sử dụng một câu lệnh LINQ Where
đơn giản để nhận một tập con của các chuỗi kết nối trong app.config của tôi. Tại sao trình biên dịch ngăn cản tôi làm điều này?
+1 Không chỉ bản sao của [that] (http://stackoverflow.com/q/776397/419956) mà còn của [this] (http://stackoverflow.com/questions/26414317/system-data -datarowcollection-không-không-chứa-một-định nghĩa-cho-tolist-và-không) tôi đã trả lời 9 giờ trước. Về cơ bản lý do cho điều này là các lớp đó lớn tuổi hơn Generics trong C#. –
Vâng, tôi đoán có thể có nhiều bản sao hơn, một khi bạn * làm * hiểu được vấn đề, nó sẽ dễ dàng phát hiện ra chúng. Tôi đã sử dụng tính năng "Đặt câu hỏi" làm vịt cao su, giúp tôi tìm câu trả lời của mình. Tôi figured văn bản của tôi * có thể giúp những người khác * tìm kiếm cho trường hợp cụ thể của vấn đề này, và vì có vẻ như không phải là một về 'ConnectionStrings' nhưng vì vậy tôi đăng nó anyways. – Jeroen
Nó không có nghĩa là chỉ trích. Trong trường hợp này, không rõ lý do tại sao họ không cho phép [lớp] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationelementcollection%28v=vs.80%29.aspx) triển khai 'IEnumerable' vì nó cũng từ .NET 2.0, nơi generics được giới thiệu. Tôi đoán rằng họ đã không được hoàn thành tại thời điểm sinh của lớp đó, –