2014-02-19 4 views
0

모든 형식과 호환되도록이 변환기를 쓰려고합니다. 그래서 제네릭을 사용하고 있습니다. 그러나 다음과 같은 컴파일 타임 오류가 발생합니다.일반 변환기에서 형식을 추론 할 수 없습니다.

error CS0411: The type arguments for method 'SomeConverter.ConvertToList<T>(ArrayLike)' cannot be inferred from the usage. Try specifying the type arguments explicitly. 

명시 적으로 유형을 ConvertToList에 명시하지 않고도 가능합니까? 그렇지 않다면 왜 T는 일반적인 방법으로 추측 할 수 없습니까?

using System; 
using System.Collections; 
using System.Collections.Generic; 

public static class SomeConverter 
{ 
    public static List<T> ConvertToList<T>(ArrayLike inputArray) 
    {  
     List<T> tList = new List<T>(); 
     for(int i=0; i < inputArray.Length; i++)    
     { 
      tList.Add ((T)(object)inputArray[i]); 
     } 

     return tList; 
    } 

} 

public class ArrayLike 
{ 
    private string[] arr = new string[100]; 

    public string this[int i] 
    { 
     get 
     {    
      return arr[i]; 
     } 
     set 
     { 
      arr[i] = value; 
     } 
    } 

    public int Length { get { return 100; } } 
} 

class TestClass 
{ 
    static void Main(string[] args) 
    { 
     ArrayLike arrayLike = new ArrayLike(); 
     arrayLike[0] = "a"; 
     arrayLike[1] = "b"; 
     arrayLike[2] = "c"; 

     List<string> stringList = SomeConverter.ConvertToList(arrayLike); 
     foreach(string str in stringList) 
      Console.WriteLine (str); 
    } 
} 
+2

왜 'ConvertToList'가 일반적입니까? 'ArrayLike' 만 취할 수 있으므로 요소는 문자열이어야합니다. – Lee

+0

@ 글쎄, 그것은 또한'object'로 매개 변수화 될 수 있습니다. 그래도별로 의미가 없습니다 –

+0

@ SergeyBerezovskiy - 네, 맞습니다. C#은 일반 매개 변수의 하한을 지원하지 않습니다. – Lee

답변

5

이 방법에는 일반 매개 변수가 없습니다. 그래서, 그것은 그것의 주장으로부터 T의 타입을 추론 할 수 없습니다. 일반 매개 변수 유형을 수동으로 지정해야합니다.

List<string> stringList = SomeConverter.ConvertToList<string>(arrayLike); 
+1

감사합니다, 바보 같은 날. 그 예가 내가 가진 정확한 문제를 밝히지 않은 것 같습니다. 다른 질문에 게시 할 것입니다. – user2994682

관련 문제