通用转换器无法推断类型

时间:2014-02-19 21:39:07

标签: c# generics casting

我试图编写此转换器以适用于所有类型。所以我使用泛型。但是收到以下编译时错误。

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);
    }
}

1 个答案:

答案 0 :(得分:5)

此方法中没有任何通用参数。所以,它不能从它的论证中推断出T的类型。您应手动指定类型泛型参数:

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