0

为什么我不能创建一个返回类型的接口方法List<T>?我遇到了这个编译错误“找不到类型或命名空间名称'T'”

interface ILoader 
{        
    List<T> LoadValues();
}

感谢您的任何意见。

4

3 回答 3

7

T的界面应该是什么?对于编译器,T此时只是一个未知标识符。

您需要为 指定一些东西T,某些类型用作 的类型参数List<T>


根据您想要实现的目标,有四个选项:

  • 在接口/类级别声明T为通用参数:

    interface ILoader<T>
    {        
        List<T> LoadValues();
    }
    
  • 在方法级别声明T为泛型参数:

    interface ILoader
    {        
        List<T> LoadValues<T>();
    }
    
  • 将固定类型分配为T; 例如int(wlog):

    interface ILoader
    {        
        List<int> LoadValues();
    }
    
  • 在更高的嵌套级别上声明T为通用参数(感谢Jeppe Stig Nielsen指出这种可能性):

    class Outer<T>
    {
        interface ILoader
        {
            List<T> LoadValues();
        }
    }
    
于 2013-01-20T14:53:58.000 回答
2

T 泛型参数也必须在接口中声明。像这样的东西:

interface ILoader<T>
{        
    List<T> LoadValues();
}
于 2013-01-20T14:53:37.440 回答
0

你应该这样做:

interface ILoader<T>
{
    List<T> LoadValues();
}

或者

interface ILoader
{        
    List<T> LoadValues<T>();
}        

甚至,可能:

interface ILoader 
{        
    List<dynamic> LoadValues();
}

^不是最好的主意,但可以使用。

于 2013-01-20T15:55:34.353 回答