2016-04-25 182 views
0

我從標題知道你會說這是一個重複的,但是......參考函數C#

所以,我在MainWindow類的構造函數創建了類,並取得了一定的對象(Masina類):

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

當我使用這個類功能構造它工作正常,但是當我嘗試使用一些功能,通過這個爭論是這樣的:

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

然後SomeFun ction將此爭論視爲未引用。 ref不適合我!

任何人都可以幫我解決嗎?

+4

什麼是預期的行爲,你怎麼看? 「作品」和「不工作」並不是真正有幫助的問題描述。 – germi

+0

你是什麼意思,由裁判「不工作」你會得到什麼錯誤?也是這兩個代碼片段在同一個文件中,如果不是一次引用另一個,或者它們在同一個namspace中? –

+1

這個'私人馬西納[] _masina =新馬西納[10]; _masina [0] .Load(1,'x');'不應該工作,因爲數組不包含對實例的引用。 – Maarten

回答

1

大概要初始化Masina[]陣列中的構造,像這樣:

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