0

이 코드 2013의 Visual Studio에서 .NET 4.5.1 응용 프로그램에서 here 작품 : 그러나왜 형식 인수를 유추 할 수 없으며 명시 적으로이를 지정할 수 있습니까? 대답에서 적응

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에서 .NET 3.5, Compact Framework에서/윈도우 CE 응용 프로그램에서 동일한 코드 2008 년 "컴파일 할 수 없습니다. 'System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable, System.Func)'메서드의 형식 인수를 사용에서 추론 할 수 없습니다. 명시 적 형식 인수를 지정하십시오."

이 줄에서 오류가 발생합니다.

List<SiteQuery> sitequeries = xmlDoc.Descendants("SiteQuery").Select(GetSiteQueryForXMLElement).ToList(); 

동일한 코드가 한 경우에만 작동하지만 다른 코드에서는 작동하지 않는 이유는 무엇입니까? 그 이유는 Windows CE의 코드가 까다롭기 때문이거나 .NET 4.5가 4.5.1이 아니기 때문입니까?

이러한 제한 사항 중 하나 또는 둘 모두가 문제이거나 해결 방법이 있습니까? 아니면 "코딩 보드로 돌아 가기"상황입니까?

+2

'YourTypeHere> (GetSiteQueryForXMLElements)를 선택하십시오. –

+3

@EricJ .: 소스 * 및 * 결과 유형을 지정해야합니다. - '선택'에는 두 가지 유형 매개 변수가 있습니다. –

+0

좋은 지적, 답변에 반영된 것을 봅니다. (+1) –

답변

4

유형 추론은 VS2010 (IIRC)에서 변경되었습니다. 기본적으로 컴파일러는 약간 더 능력이되었습니다. .NET 자체의 변화는 문제가 아닙니다.

두 가지 간단한 옵션 :

  • 사용하는 대신 람다 식 :

    .Select<XElement, SiteQuery>(GetSiteQueryForXMLElement); 
    

다음 중 하나를

.Select(x => GetSiteQueryForXMLElement(x)) 
  • 이 방법 그룹 변환을 형식 인수를 지정 할까요 잘 작동합니다.

  • +0

    IEnumerable에 대해 목록을 교환하면 둘 중 하나가 작동합니다; 감사! –