-1

Je découvre Visual C# et je voulais juste créer une application CLI minuscule. Avec les codes écrits ci-dessous, je reçois cette erreur: "Référence d'objet non définie sur une instance d'un objet.". Évidemment, puisque je suis un noob, je n'ai aucune idée comment résoudre le problème.Référence de l'objet Erreur non définie sur C#

Voici le code que j'ai en Program.cs:

class Program 
{ 
    static void Main(string[] args) 
    { 
     GetAverage(args); 
    } 

    static void GetAverage(string[] s) 
    { 
     var ave = new Average(); 

     ave.arg = s; 
     ave.FindAverage(); 
     ave.DisplayResult(); 
    } 
} 

Voici le code que j'ai dans le Average.cs:

public class Average 
{ 
    public Average() 
    { 
     Console.Write("\n" + "Given numbers: "); 

     foreach (string s in this.arg) 
     { 
      Console.Write(this.arg + " "); 

      num += Double.Parse(s); 
     } 
    } 

    public double num = 0; 
    public string[] arg; 
    public double result; 

    public void FindAverage() 
    { 
     this.result = this.num/this.arg.Length; 
    } 

    public void DisplayResult() 
    { 
     Console.WriteLine("\n" + "Average: " + this.result); 
    } 
} 

Ce que je veux faire est d'accéder aux arguments de Main méthode de la classe Program afin que je puisse travailler avec lui de la classe moyenne.

S'il vous plaît aidez-moi avec celui-ci. Merci!

+7

'var ave = new Average();' provoque l'exécution de votre constructeur. À ce stade, 'args' n'est pas défini, il vous donnera une erreur à' foreach (string s dans this.arg) '. Faites votre constructeur prendre 'string [] args' et définissez' this.arg = args' au début de votre constructeur. – Rob

Répondre

4

Le champ public string[] arg; est utilisé dans votre constructeur, mais il est défini après l'exécution du constructeur. Essayez plutôt quelque chose comme ceci:

public Average(string[] arg) 
{ 
    this.arg = arg 

    // .. 
    // existing code 
} 
+0

Merci pour la réponse rapide. Votre réponse, la révision du code, a totalement résolu l'erreur. Mais maintenant, une nouvelle erreur est apparue. "Le fil d'alimentation n'était pas au bon format." Peut-être que je ne fais que saisir un mauvais type de données? J'analyse les arguments en Double afin que je puisse le calculer. –

+0

Essayez d'utiliser '.' au lieu de ',' pour les décimales (ou l'inverse). Vérifiez également si le tableau contient des chaînes vides. – user1793963