2017-05-01 1 views
-2

J'essaye d'écrire un morceau de code, l'une des choses impliquées est la lecture d'un fichier .txt ligne par ligne. Cependant, je continue d'obtenir l'erreur "Une référence d'objet est requise". Je ne vois pas comment la simple lecture d'un fichier peut causer autant de problèmes, mais c'est le cas. Voici mon code (ignorer en commentaire peu juste avant le départ):Impossible de lire le fichier dans Visual Studio

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

Change 'public void IsValidLine (texte de chaîne)' à 'public static void IsValidLine (texte de chaîne)'. Vous avez besoin d'une instance de la classe 'ReadFromFile' pour utiliser la méthode' IsValidLine' lorsque vous n'avez pas le mot clé 'static'. Il suffit donc d'ajouter le mot-clé statique et vous pouvez comprendre les détails de ce que je viens de dire plus tard. – Quantic

+0

Ok merci, je vais le faire. –

Répondre

0

Le problème est que vous accédez à une classe non statique dans un contexte statique - donc vous avez besoin d'une référence à un objet de cette classe. Donc, tout ce que vous avez à faire est de rendre la méthode statique:

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

Pour éviter de telles erreurs, je vous suggère de faire statique la classe ainsi:

static class ReadFromFile 
//... 

Ensuite, le code ne compile pas si quelque chose n'est pas statique dans la classe.

+0

@GeorgeBouverie l'a fait pour résoudre votre problème? Si c'est le cas, n'oubliez pas de marquer la réponse comme une réponse valide, car cela vous aidera, ainsi que la communauté dans son ensemble, à identifier les problèmes résolus. – MetaColon