【发布时间】:2015-01-07 21:06:36
【问题描述】:
此代码改编自答案 here 适用于 Visual Studio 2013 中的 .NET 4.5.1 应用程序:
private void button42_Click(object sender, EventArgs e)
{
List<SiteQuery> sitequeries = GetListOfSiteQueries();
foreach (SiteQuery sitequery in sitequeries)
{
// TODO: Insert into table
}
}
private List<SiteQuery> GetListOfSiteQueries()
{
ArrayList arrList =
FetchSiteQuery("http://localhost:21608/api/sitequery/getall/dbill/ppus/42");
String omnivore = "<SiteQueries>";
foreach (String s in arrList)
{
omnivore += s;
}
omnivore += "</SiteQueries>";
String unwantedPreamble = "<ArrayOfSiteQuery xmlns:i=\"http://www.w3.org/2001/XMLSchema-
instance\" xmlns=\"http://schemas.datacontract.org/2004/07/CStore.DomainModels.HHS\">";
omnivore = omnivore.Replace(unwantedPreamble, String.Empty);
omnivore = omnivore.Replace("</ArrayOfSiteQuery>", String.Empty);
XDocument xmlDoc = XDocument.Parse(omnivore);
List<SiteQuery> sitequeries =
xmlDoc.Descendants("SiteQuery").Select(GetSiteQueryForXMLElement).ToList();
return sitequeries;
}
private static SiteQuery GetSiteQueryForXMLElement(XElement sitequery)
{
return new SiteQuery
{
Id = sitequery.Element("Id").Value,
. . .
但是,VS 2008 中的 .NET 3.5、Compact Framework/Windows CE 应用程序中的相同代码无法使用“方法 'System.Linq.Enumerable.Select(System.Collections.Generic .IEnumerable, System.Func)' 无法从用法中推断出来。尝试明确指定类型参数。"
在这一行失败:
List<SiteQuery> sitequeries = xmlDoc.Descendants("SiteQuery").Select(GetSiteQueryForXMLElement).ToList();
为什么相同的代码在一种情况下有效,而在另一种情况下无效;是因为顽固的代码 Windows CE 和/或因为它是 .NET 3.5 而不是较新的 4.5.1?
如果这些限制中的一个或两个是问题,是否有解决方法,或者是“回到编码板”的情况?
【问题讨论】:
-
试试
Select<YourTypeHere>(GetSiteQueryForXMLElements) -
@EricJ.:您需要指定源 和 结果类型 -
Select上有两个类型参数。 -
好点,我看到你的回答中反映了这一点 (+1)
标签: c# compact-framework windows-ce extension-methods generic-type-argument