2016-05-24 11 views
0

Ich erhalte den Fehler: Es gibt kein Argument gegeben, dass der erforderliche formale Parameter 'Wert' von 'CsvLines.CsvLines (Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge, Zeichenfolge)'Kein Argument für formalen Parameter

entspricht

Im folgenden ist, wo ich die Werte zu meiner Klasse hinzufügen.

List<CsvLines> valuesList = new List<CsvLines>(); 

      Console.WriteLine("Currently filtering " + fileName); 

      while ((line = streamReader.ReadLine()) != null) 
      { 

       // Change the logic here depending on what we want from the file. Depending on the list it might be better to filter by things we want. 
       if (line.Contains("|")) //Add variable here to search for in the files 
       { 
        string[] csvFields = line.Split('|'); 
        CsvLines lines = new CsvLines 
        { 
         Value = csvFields[0], 
         Name = csvFields[1], 
         Spanish = csvFields[2], 
         French = csvFields[3], 
         Russian = csvFields[4] 
        }; 

        valuesList.Add(new CsvLines(lines.Value, lines.Name, lines.Spanish, lines.French, lines.Russian)); 
       } 

       fileRowCount++; 
      } 

Unten ist meine eigentliche Klasse:

namespace LogHarvester 
{ 
    public class CsvLines 
    { 
    public string Value { set; get; } 
    public string Name { set; get; } 
    public string Spanish { set; get; } 
    public string French { set; get; } 
    public string Russian { set; get; } 

    public CsvLines(string value, string name, string spanish, string french, string russian) 
    { 
     this.Value = value; 
     this.Name = name; 
     this.Spanish = spanish; 
     this.French = french; 
     this.Russian = russian; 
    } 

    } 
} 

ich Ihnen mehr Informationen geben würde, aber ich habe einige der Suche getan und ich weiß ehrlich gesagt nicht, ein viele Suchanfragen zurück, dass ich kann Basiskonstruktor, aber ich bin mir nicht sicher, wie das das Problem lösen wird.

Ich beabsichtige, jede Zeile zu analysieren und dann in ein Array einzufügen, bevor ich die Array-Positionen den Werten zuweise, und von dort füge ich sie dann zu einer Liste der Klasse "CsvLines" hinzu. Jede Hilfe würde sehr geschätzt, wenn Sie weitere Informationen benötigen, werde ich mein Bestes geben, um es Ihnen zu geben.

Antwort

0

Das Problem liegt in dieser Erklärung:

CsvLines lines = new CsvLines 
{ 
    Value = csvFields[0], 
    Name = csvFields[1], 
    Spanish = csvFields[2], 
    French = csvFields[3], 
    Russian = csvFields[4] 
}; 

diese Weise können Sie rufen im Wesentlichen den Konstruktor ohne Argumente (z new CsvLines()), das nicht existiert. Sie sollten einen Standardkonstruktor in Ihrer Klasse definieren.

Alternativ besteht keine Notwendigkeit, zwei neue CsvLines Objekte zu erstellen (oder einen Default-Konstruktor definieren), nur:

valuesList.Add(new CsvLines(csvFields[0], csvFields[1], csvFields[2], csvFields[3], csvFields[4])); 
+0

Danke, sehr hilfreich, ich wusste nicht, Sie würden einen leeren Konstruktor benötigen, wenn Sie sollten sie stattdessen in der Laufzeit initialisieren. Danke, dass du das geklärt hast. – Callum

Verwandte Themen