2009-08-20 5 views
2

Ich habe Probleme mit der Deklaration von 2-dimensionalen Arrays in C#, Bestückung und Rückgabe des Arrays.2-dimensionale Arrays in C# und wie das Array zurückgegeben wird

Im Moment Ich erkläre das Array wie folgt:

private static string[,] _programData = new String[50,50]; 
    public string[,] ProgramData 
    { 
     get 
     { 
      return _programData; 
     } 
    } 

_programData den Fehler zeigt String ‚von Typ kann nicht implizit konvertieren '[,] to string [] []'

ich möchte darauf hinweisen, dass ich versuche, wie so Program von einer anderen Klasse zu nennen:

for (serviceCount = 0; serviceCount <= ffm.Program.Length; serviceCount++) 
      { 
       Console.WriteLine("Program Number: " + ffm.Program[serviceCount].ToString()); 
       for (serviceDataCount = 0; serviceDataCount <= ffm.ProgramData.Length; serviceDataCount++) 
       { 
        **Console.WriteLine("\t" + ffm.ProgramData[serviceCount, serviceDataCount].ToString());** 
       } 
      } 

Fehler tritt auf der fett Zeile oben mit:

Objektverweis nicht auf eine Instanz eines Objekts gesetzt.

Ich glaube nicht, dass es scheint, ein Problem mit, wie ich das Array deklariert habe, ist es nur die Typabweichung, die ich nicht verstehe.

Grüße

+0

Wird der Fehler auf dem "return _programData;" Zeile oder die Zeile, die ProgramData aufruft? Wenn es Letzteres ist, würde ich annehmen, dass es für 2D-Arrays keine String-Verkettung gibt. –

+0

Ich habe den Fehler in dieser Zeile jetzt behoben, es war ein kleines bisschen Syntax, die ich übersehen habe. Es scheint, dass es String-Verkettung für 2D-Arrays gibt. Sobald ein Fehler vorbei ist, kommt ein anderer. – Ric

+0

Es würde wirklich helfen, wenn Sie die Zeile markieren, in der Sie den Fehler tatsächlich hatten. Übrigens scheinen Sie auch einen Fehler in diesem Service zu habenDataCount zählt bis zu 2500 Sie erwarten nur 50. Die Länge eines mehrdimensionalen Arrays ist Produkt seiner Dimensionen. – AnthonyWJones

Antwort

2

Zunächst wird Aufruf ffm.ProgramData.Length zurückkehrt 2500 (50 * 50), wie oben erwähnt, so dass Sie die zählen zu ffmProgramData.GetLength (1) reparieren müssen die Größe der Sekunde Dimension zurückzukehren.

Zweitens tritt der Fehler, den Sie erhalten "Objektverweis nicht auf eine Instanz eines Objekts festgelegt" auf, weil Sie auf einen nicht initialisierten Teil des Arrays verweisen. Stellen Sie sicher, dass das Array voll ist oder zumindest voll mit leeren Strings ist (Sie müssen diese Schleife natürlich im Konstruktor ausführen, indem Sie die Variablennamen gegebenenfalls ändern, da ProgramData nur gelesen wird, wie Sie es haben):

for(int fDim = 0; fDim < ffm.ProgramData.GetLength(0); fDim++) 
    for(int sDim = 0; sDim < ffm.ProgramData.GetLength(1); sDim++) 
     ffm.ProgramData[fDim, sDim] = ""; 

Drittens müssen Sie die ToString() - Methode innerhalb der Schleife nicht aufrufen. Sie geben eine Zeichenfolge an eine Zeichenfolge aus.

+0

Dies hat das Problem gelöst. Ich erhalte jetzt keine Fehlermeldungen, aber mein 2d-Array scheint nicht von meinen Daten ausgefüllt zu sein, d. H., Es werden Leerzeichen ausgedruckt. Ich werde versuchen, es zu sortieren, aber vielen Dank fürs Erste. – Ric

1

Programdata zeigt den Fehler ‚von Typ nicht implizit konvertieren 'string [*] auf string [] []'

Nein, es zeigt keine Error. Der Code kompiliert gut (mit C# 3.5).

Verwandte Themen