Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不能推断类型参数,如何显式指定它们?_C#_Compact Framework_Windows Ce_Extension Methods_Generic Type Argument - Fatal编程技术网

C# 为什么不能推断类型参数,如何显式指定它们?

C# 为什么不能推断类型参数,如何显式指定它们?,c#,compact-framework,windows-ce,extension-methods,generic-type-argument,C#,Compact Framework,Windows Ce,Extension Methods,Generic Type Argument,此代码改编自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

此代码改编自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,
        . . .
private void按钮42\u单击(对象发送者,事件参数e)
{
List sitequeries=GetListOfSiteQueries();
foreach(SiteQuery中的SiteQuery SiteQuery)
{
//TODO:插入到表中
}
}
私有列表GetListOfSiteQueries()
{
ArrayList arrList=
FetchSiteQuery(“http://localhost:21608/api/sitequery/getall/dbill/ppus/42");
字符串杂食=”;
foreach(arrList中的字符串s)
{
杂食动物+=s;
}
杂食动物+=”;
字符串unwantedPreamble=“”;
omnivore=omnivore.Replace(unwantedPreamble,String.Empty);
omnivore=omnivore.Replace(“,String.Empty);
XDocument xmlDoc=XDocument.Parse(杂食);
列表站点查询=
子体(“SiteQuery”).Select(GetSiteQueryForXMLElement.ToList();
返回站点查询;
}
私有静态SiteQuery GetSiteQueryForXMLElement(XElement SiteQuery)
{
返回新的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();
List sitequeries=xmlDoc.subscriptions(“SiteQuery”).Select(GetSiteQueryForXMLElement.ToList();
为什么相同的代码在一种情况下可以工作,而在另一种情况下却不能工作;这是因为顽抗者的代码是Windows CE,还是因为它是.NET 3.5而不是较新的4.5.1


如果这些限制中的一个或两个都是问题所在,是否有解决方法,或者是“返回到编码板”的情况?

类型推断在VS2010(IIRC)中发生了变化-基本上编译器的能力有所提高。这与.NET本身的变化无关

两个简单的选择:

  • 请改用lambda表达式:

    .Select(x => GetSiteQueryForXMLElement(x))
    
  • 使用方法组转换指定类型参数:

    .Select<XElement, SiteQuery>(GetSiteQueryForXMLElement);
    
    .Select(GetSiteQueryForXMLElement);
    

两者都可以正常工作。

类型推断在VS2010(IIRC)中发生了变化-基本上编译器的功能有所提高。这与.NET本身的变化无关

两个简单的选择:

  • 请改用lambda表达式:

    .Select(x => GetSiteQueryForXMLElement(x))
    
  • 使用方法组转换指定类型参数:

    .Select<XElement, SiteQuery>(GetSiteQueryForXMLElement);
    
    .Select(GetSiteQueryForXMLElement);
    

两者都可以正常工作。

尝试
Select(getsitequeryforxmlements)
@EricJ.:您需要指定源类型和结果类型-在
Select
上有两个类型参数。很好,我看到您的答案中反映了这一点(+1)尝试
Select(getsitequeryforxmlements)
@EricJ.:您需要指定源类型和结果类型-在
Select
上有两个类型参数。很好的一点,我在您的回答中看到了这一点(+1)如果我将列表换成IEnumerable,任何一个都可以,是的;谢谢!如果我将列表换成IEnumerable,任何一个都可以,是的;谢谢!