2016-04-25 19 views
0

ich aus dem Titel wissen, würden Sie sagen, es ist ein Duplikat, aber ...Referenz in Funktionen C#

Also, ich habe meine Klasse erstellt und einige Objekte (der Klasse Masina) in MainWindow Klassenkonstruktors:

public class MainWindow 
{ // example 
    private Masina[] _masina = new Masina[10]; 
    _masina[0].Load(1, 'x'); // works 
    SomeFunction(_masina); 
} 

wenn ich diese Klasse Funktionen in Constructor es gut funktioniert, aber wenn ich eine Funktion zu verwenden versuchen und dies wie folgt argumentieren passieren:

public static void SomeFunction(Masina[] masina) 
    { 
     for (int i = 0; i < 10; i++) 
      try 
      { 
       masina[i].Load(i, 'x'); 
      } 
      catch 
      { 
      } 
    } 

dann SomeFun ction nimmt diese Argumentation als nicht referenziert an. ref nicht für mich arbeiten!

Kann mir jemand helfen zu lösen?

+4

Was ist das erwartete Verhalten und was sehen Sie? "funktioniert" und "arbeite nicht" sind keine wirklich hilfreichen Problembeschreibungen. – germi

+0

Was meinst du mit Ref "nicht funktioniert" welchen Fehler bekommst du? Sind diese beiden Code-Snippets auch in der gleichen Datei, wenn nicht einmal auf die andere verwiesen wird oder sind sie im selben Namespace? –

+1

Diese 'private Masina [] _masina = neue Masina [10]; _masina [0] .Load (1, 'x'); 'sollte nicht funktionieren, da das Array keine Verweise auf Instanzen enthält. – Maarten

Antwort

1

Wahrscheinlich möchten Sie die Masina[] Array im Konstruktor, wie diese initialisieren:

public class MainWindow { 
    // Declaraion is OK, calling method _masina[0].Load(1, 'x') - is not 
    private Masina[] _masina = new Masina[10]; 

    // constructor is the place you're supposed to put complex initialization to 
    public MainWindow() { 
    // You can call the method in the constructor 
    SomeFunction(_masina); 
    } 

    public static void SomeFunction(Masina[] masina) { 
    // validate arguments in the public methods 
    if (null == masina) 
     throw new ArgumentNullException("masina"); 

    // do not use magic numbers (10), but actual parameters (masina.Length) 
    for (int i = 0; i < masina.Length; ++i) 
     masina[i].Load(i, 'x'); 

    // hiding all exceptions - catch {} - is very bad idea 
    } 
}