2017-04-14 82 views
1

我有一個方法,應該接受一個結構變量並返回一個布爾值。這工作正常 - 至少在語法方面,也許。C#錯誤傳遞一個新的結構變量給方法?

private bool equalsidcomparison(Employee newGuy) 
    { 
     foreach (Employee E in employees) 
     { if (E.Name == newGuy.Name || E.phone == newGuy.phone) { return true; } return false; } 
     return false; 
    } 

後來在點擊一個按鈕的方法,我在哪裏將數據傳遞到結構體變量的字段(newGuy),然後通過newGuy上述方法,有人告訴我,newGuy是未分配的局部變量。

Employee newGuy; 
     newGuy.id = nextIDnumber; 
     newGuy.Name = txtbName.Text; 
     newGuy.department = (string)comboDept.SelectedItem; 
     newGuy.title = comboJob.SelectedText; 
     newGuy.phone = txtbPhone.Text; 


     foreach (Employee E in employees) 
     { 
      if (equalsidcomparison(newGuy) == true) { }; 
     } 

我覺得這是一個簡單的解決方案,但我是新的,不知道該怎麼做。我環顧四周無濟於事,我不能離開我使用的過程太遠,因爲它是任務的一部分。

+0

分配一個初始值。 –

+0

這通常是其他數據類型的變量的解決方案,但我怎麼去做一個結構?我想我必須通過併爲其所有字段設置「0」值? – aBoy

+1

當我說「賦予它初始值」時,我的意思是「Employee newGuy = new Employee();」局部變量必須在它所屬的方法退出之前都有一個值。否則,你會得到你剛剛得到的編譯器錯誤。 –

回答

1

您需要用運營商new初始化newGuy。您可以通過聲明結合其字段初始化:

Employee newGuy = new Employee { 
    id = nextIDnumber 
, Name = txtbName.Text 
, department = (string)comboDept.SelectedItem 
, title = comboJob.SelectedText 
, phone = txtbPhone.Text 
}; 
+0

完美。非常感謝你。 – aBoy

+2

備註 - 可變結構是個壞主意...... –

0

您需要實例您的變量的實例 - 就像這樣:

Employee newGuy = new Employee(); 
newGuy.id = nextIDnumber; 
... 

你也可以把它寫爲「無功newGuy =新員工();」 (取決於誰你問,這是更好的語法...)

您還可以創建你的對象,如:(注 - 這需要你的「設置」方法可訪問)

Employee newGuy = new Employee() 
    { 
     id = nextIDnumber, 
     Name = "something", 
     ... 
    }; 

我也建議在變量名稱中使用一致的套管。 (id,名稱,標題,...)。一般來說,c#的標準是將PascalCase用於公共可用的方法/屬性。

+0

感謝您的迴應和建議。我通常做一個體面的工作,以符合套管,但這個項目很匆忙,我有點懶 – aBoy