【发布时间】:2014-12-12 17:17:28
【问题描述】:
我的目标是在控制台应用程序中对 ConfigurationManager.ConnectionStrings 集合使用 LINQ Where 查询(假设新的 .NET 4.5 控制台应用程序添加了 System.Configuration 引用和相应的 using 语句)。
我从这个开始,不工作:
var relevantSettings =
ConfigurationManager.ConnectionStrings.Where(s => s.Name.StartsWith("Xyz"));
它告诉我:
方法“
IEnumerable<TSource> System.Linq.Enumerable.Where<TSource(this IEnumerable<TSource>, Func<TSource,bool>)”的类型参数无法从用法中推断出来。尝试明确指定参数。
这让我措手不及,所以我尝试了这个来检查我的理智,但是这也不起作用工作:
foreach (var settingsin ConfigurationManager.ConnectionStrings)
{
if (settings.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}
它抱怨不是关于foreach 语句,而是关于.Name 位,错误:
无法解析符号“名称”
我知道可能有什么东西阻止了编译器推断var 的类型,仔细检查我尝试了这个确实工作:
foreach (ConnectionStringSettings settings in ConfigurationManager.ConnectionStrings)
{
if (connectionString.Name.StartsWith("Xyz")) Console.WriteLine("Found one!");
}
但是,这对我没有多大帮助,除了解决我眼前的问题。我想了解这里发生了什么。
我想要做的就是使用一个简单的 LINQ Where 语句在我的 app.config 中获取连接字符串的子集。为什么编译器阻止我这样做?
【问题讨论】:
标签: c# linq connection-string configurationmanager