我与使用通用接口和c#类的类型发生冲突

时间:2017-02-28 03:22:06

标签: c# interface

我正在介绍C#Generic接口和clases,并且有一个我无法处理的问题,如果有人可以帮助我,我会在这里分享代码。

enum ListError
{
    Ok = 0,
    NoMemory,
    ErrorPosition
}

interface IList<T>
{

    int End();

    ListError Insert<T>(T x, int p);

}

class ListArrays<T>: IList<T>
{
    const int MAX = 100;

    T [] data = new T[MAX];
    int last = 0;

    public int End()
    {
        return last+1;
    }

    ListError Insert<T>(T x, int p)
    {
        if (last >= MAX)
            return ListError.NoMemory;
        if (p > last || p < 0)
            return ListError.ErrorPosition;
        for (int q = last; q >= p; q--)
            data[q] = data[q - 1];
        last++;
        data[p] = x;
        return ListError.Ok;
    }
}

我正在与行

中的编译时错误作斗争
data[p] = x;

指出:

Cannot implicitly convert type 'T [c:\Users\MartinD_PC\Documents\VisualStudio 2013\Projects\Aho_Hopcroft_Ullman\Aho_Hopcroft_Ullman\Chapter_2\ListaArreglos.cs(9)]' to 'T'  

1 个答案:

答案 0 :(得分:1)

ListError Insert<T>(T x, int p)更改为ListError Insert(T x, int p)。编译器认为您在T中指定了新类型Insert

注意:Insert需要公开(或明确,因为它是一个接口实现)。否则,这将是另一个编译错误。