2014-02-24 2 views
-1

다음과 같은 유형 추론이 "실패"합니다 (적어도 실패한 것 때문에 실패했습니다). 기본적으로 제네릭 형식의 배열을 받아들이는 메서드가 있습니다. 배열에 익명 객체를 입력해야하지만 형식 유추는 그렇게하지 못합니다.타입 추론 실패

private void foo<T>(IEnumerable<T> items, Func<T, Object>[] propertySelector) { } 

    public void Main() 
    { 
     var peeps = new[] 
     { 
      new {FirstName = "Taco", LastName = "King"}, 
      new {FirstName = "Papa", LastName = "Georgio"} 
     }; 

     foo(peeps, new[] 
     { 
      an => an.FirstName, //Error cannot infer type of "an" 
      an => an.LastName //Error cannot infer type of "an" 
     }); 
    } 

이유는 배열 유형이 컨텍스트가 아닌 내용에서 유추되기 때문입니다. 이 상황에서 익명 형식을 사용하는 것이 불가능 해 보입니다.

이 문제를 해결하기위한 아이디어가 있습니까?

답변

-1

주어진 예제에서 propertySelectorparams 인수로 변경 한 다음 각 함수를 배열 대신 전달할 수 있습니다. 당신이 어떤 이유로 params을 사용할 수없는 경우, 다음과 같은 도우미 기능이 작동됩니다

/// <summary> 
    /// Allows the use of type inference to get selector functions for the type of an enumerable. 
    /// </summary> 
    /// <typeparam name="T">The type of the enumerable.</typeparam> 
    /// <param name="enumerable">The enumerable.</param> 
    /// <param name="selectors">A set of selectors to return.</param> 
    /// <returns>The selectors passed in.</returns> 
    public static Func<T, Object>[] GetSelectors<T>(
     IEnumerable<T> enumerable, 
     params Func<T, Object>[] selectors) 
    { 
     return selectors; 
    } 

그래서 귀하의 예제가 될 것입니다 : 당신이 그것을 대답 할 수 있도록

private void foo<T>(IEnumerable<T> items, Func<T, Object>[] propertySelector) { } 

public void Main() 
{ 
    var peeps = new[] 
    { 
     new {FirstName = "Taco", LastName = "King"}, 
     new {FirstName = "Papa", LastName = "Georgio"} 
    }; 

    foo(peeps, GetSelectors(peeps, an => an.FirstName, an => an.LastName)); 
} 
+0

방금 ​​질문을 했 당신 자신? – 48klocs

+0

예 wt *, 방금 대답했습니다. 나는 그 사람이 2 개의 계정을 가지고 있고, 다른 하나와 포인트를 얻기 위해 자신을 대답한다고 생각한다. 절름발이 – AAlferez

+0

그게 그렇게 권장된다. - http://stackoverflow.com/help/self-answer – McAden