gpt4 book ai didi

c# - 使用 LINQ Where 查询仅获取部分 ConfigurationManager.ConnectionStrings

转载 作者:太空狗 更新时间:2023-10-29 19:55:49 25 4
gpt4 key购买 nike

我的目标是使用 LINQ Where查询 ConfigurationManager.ConnectionStrings控制台应用程序中的集合(假设一个全新的 .NET 4.5 控制台应用程序添加了 System.Configuration 引用和相应的 using 语句)。

我从这个开始,工作:

var relevantSettings =
ConfigurationManager.ConnectionStrings.Where(s => s.Name.StartsWith("Xyz"));

它告诉我:

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.

这让我措手不及,所以我尝试了这个来检查我的理智,但是工作要么:

foreach (var settingsin ConfigurationManager.ConnectionStrings)
{
if (settings.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}

它提示 foreach声明,但关于 .Name位,错误:

Could not resolve symbol 'Name'

我知道可能有什么东西阻止了编译器推断 var的类型,仔细检查我试过这个哪个确实有效:

foreach (ConnectionStringSettings settings in ConfigurationManager.ConnectionStrings)
{
if (connectionString.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}

但是,除了解决我眼前的问题外,这对我没有太大帮助。我想了解这里发生了什么。

我只想使用简单的 LINQ Where语句在我的 app.config 中获取连接字符串的子集。为什么编译器阻止我这样做?

最佳答案

TL;DR 版本

你需要做一个 .Cast<ConnectionStringSettings>()使这项工作。

详情

好吧,如果你再深入一点,你可以让编译器告诉你更多信息:

Func<ConnectionStringSettings, bool> StartsWithXyz = c => c.Name.StartsWith("Xyz");
var relevantSettings = ConfigurationManager.ConnectionStrings.Where(StartsWithXyz);

这是告诉你:

Cannot convert instance argument type 'System.Configuration.ConnectionStringSettingsCollection' to 'System.Collections.Generic.IEnumerable<System.Configuration.ConnectionStringSettings>'

驱动ConnectionStringSettings的继承树属性,您终于可以看到罪魁祸首,这很有意义:该属性属于泛型 IEnumerable输入

这实际上使问题成为 this question 的一个相当复杂的副本,因为解决方案在于将非泛型属性转换为泛型列表,以便 LINQ 和编译器可以施展它们的魔力。对于这种特定情况,以下确实有效:

var relevantSettings = ConfigurationManager.ConnectionStrings
.Cast<ConnectionStringSettings>()
.Where(c => c.Name.StartsWith("Xyz"));

尽情享受吧!

关于c# - 使用 LINQ Where 查询仅获取部分 ConfigurationManager.ConnectionStrings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26419655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com