为什么我不能将通用List <t>声明为接口方法的返回类型?</t>

时间:2013-01-20 14:51:42

标签: c#

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

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

感谢您的任何意见。

3 个答案:

答案 0 :(得分:7)

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

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


根据您想要达到的目标,有四种选择:

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

    interface ILoader<T>
    {        
        List<T> LoadValues();
    }
    
  • T声明为方法级别的通用参数:

    interface ILoader
    {        
        List<T> LoadValues<T>();
    }
    
  • 将固定类型指定为T;例如int(w.l.o.g。):

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

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

答案 1 :(得分:2)

T generic参数也必须在接口中声明。像这样:

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

答案 2 :(得分:0)

你应该这样做:

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

或者

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

甚至可能:

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

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