2017-05-01 6 views
-2

Ich versuche, ein Stück Code zu schreiben, eine der beteiligten Sachen liest zeilenweise aus einer TXT-Datei. Ich bekomme jedoch weiterhin den Fehler "Eine Objektreferenz ist erforderlich". Ich sehe nicht, wie nur das Lesen einer Datei so viele Probleme verursachen kann, aber es hat. Hier ist mein Code (ignorieren Sie die Kommentar gesetzt Bit kurz vor dem Start):Kann Datei in Visual Studio nicht lesen

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Text.RegularExpressions; 
//(Program) 
namespace FileReader 
{ 
class ReadFromFile 
{ 
    public void IsValidLine(string text) 
    { 
     Regex rgx = new Regex(@"^([A-Za-z]{1,5})((\s\d){0,9})(\s*)$"); 
     if (rgx.IsMatch(text) == false) 
     { 
      Console.WriteLine("Invalid Format"); 
     } 

    } 
    static void Main() 
    { 
     System.IO.StreamReader file = new 
System.IO.StreamReader(@"C:\Users\Public\TestFolder\WriteLines2.txt"); 
     { 
      int counter = 0; 
      string line; 
      List<string> lines = new List<string>(); 


      while ((line = file.ReadLine()) != null) 
      { 
       //HERE IS THE ERROR 
       IsValidLine(line); 
       lines.Add(line); 
       counter++; 
      } 
     } 
    } 
} 
+1

Ändern Sie 'public void IsValidLine (Zeichenfolgetext)' in 'public static void IsValidLine (Zeichenfolgetext)'. Sie benötigen eine Instanz der 'ReadFromFile'-Klasse, um die' IsValidLine'-Methode zu verwenden, wenn Sie das Schlüsselwort 'static' nicht haben. Fügen Sie einfach das statische Schlüsselwort hinzu und Sie können die Details dessen, was ich gerade gesagt habe, herausfinden. – Quantic

+0

Ok danke, ich werde das tun. –

Antwort

0

Das Problem ist, dass Sie eine nicht-statische Klasse in statischen Kontext zugreifen - deshalb benötigt man eine Referenz auf ein Objekt dieser Klasse. Also alles, was Sie tun müssen, ist die Methode, um statisch:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Text.RegularExpressions; 
//(Program) 
namespace FileReader 
{ 
class ReadFromFile 
{ 
    public static void IsValidLine(string text) 
    { 
     Regex rgx = new Regex(@"^([A-Za-z]{1,5})((\s\d){0,9})(\s*)$"); 
     if (rgx.IsMatch(text) == false) 
     { 
      Console.WriteLine("Invalid Format"); 
     } 

    } 
    static void Main() 
    { 
     System.IO.StreamReader file = new 
System.IO.StreamReader(@"C:\Users\Public\TestFolder\WriteLines2.txt"); 
     { 
      int counter = 0; 
      string line; 
      List<string> lines = new List<string>(); 


      while ((line = file.ReadLine()) != null) 
      { 
       //HERE IS THE ERROR 
       IsValidLine(line); 
       lines.Add(line); 
       counter++; 
      } 
     } 
    } 
} 

Um solche Fehler zu vermeiden, würde ich vorschlagen, die Klasse statische sowie zu machen:

static class ReadFromFile 
//... 

Dann wird der Code nicht kompilieren wenn etwas in der Klasse nicht statisch ist.

+0

@GeorgeBouverie hat dies Ihr Problem gelöst? Wenn dies der Fall ist, vergessen Sie nicht, die Antwort als gültige Antwort zu markieren, da dies Ihnen und der weiteren Gemeinschaft hilft, die gelösten Probleme zu identifizieren. – MetaColon

Verwandte Themen