모든 형식과 호환되도록이 변환기를 쓰려고합니다. 그래서 제네릭을 사용하고 있습니다. 그러나 다음과 같은 컴파일 타임 오류가 발생합니다.일반 변환기에서 형식을 추론 할 수 없습니다.
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);
}
}
왜 'ConvertToList'가 일반적입니까? 'ArrayLike' 만 취할 수 있으므로 요소는 문자열이어야합니다. – Lee
@ 글쎄, 그것은 또한'object'로 매개 변수화 될 수 있습니다. 그래도별로 의미가 없습니다 –
@ SergeyBerezovskiy - 네, 맞습니다. C#은 일반 매개 변수의 하한을 지원하지 않습니다. – Lee