2017-02-28 1 views
0

Ich führe in C# generische Schnittstellen und Klassen, und es gibt ein Problem, mit dem ich nicht umgehen konnte, und ich werde den Code hier für wenn jemand teilen könnte mir helfen.Ich habe einen Konflikt mit Typen mit generischen Schnittstellen und Klassen mit C#

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

ich mit einem Kompilierung-Fehler in der Leitung

data[p] = x; 

bin kämpfen in dem es heißt:

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' 
+0

Bitte lesen Sie Compilerwarnungen; Sie sollten eine Warnung erhalten haben, die das Problem erklärt hat. –

Antwort

1

ändern ListError Insert<T>(T x, int p) zu ListError Insert(T x, int p). Der Compiler denkt, dass Sie einen neuen Typ T in Insert angeben.

Hinweis: Insert muss öffentlich sein (oder explizit, da es sich um eine Schnittstellenimplementierung handelt). Andernfalls wäre das ein weiterer Kompilierungsfehler.

+0

Es hat ausgezeichnet funktioniert. Danke vielmals! –

+0

Bitte markieren Sie diese als beantwortet, wenn Sie damit zufrieden sind. Vielen Dank. –

Verwandte Themen