我试图编写此转换器以适用于所有类型。所以我使用泛型。但是收到以下编译时错误。
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);
}
}
答案 0 :(得分:5)
此方法中没有任何通用参数。所以,它不能从它的论证中推断出T的类型。您应手动指定类型泛型参数:
List<string> stringList = SomeConverter.ConvertToList<string>(arrayLike);