C#错误传递一个新的结构变量给方法?

C#错误传递一个新的结构变量给方法?

问题描述:

我有一个方法,应该接受一个结构变量并返回一个布尔值。这工作正常 - 至少在语法方面,也许。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();”局部变量必须在它所属的方法退出之前都有一个值。否则,你会得到你刚刚得到的编译器错误。 –

您需要用运营商new初始化newGuy。您可以通过声明结合其字段初始化:

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

完美。非常感谢你。 – aBoy

+2

备注 - 可变结构是个坏主意...... –

您需要实例您的变量的实例 - 就像这样:

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

你也可以把它写为“无功newGuy =新员工();” (取决于谁你问,这是更好的语法...)

您还可以创建你的对象,如:(注 - 这需要你的“设置”方法可访问)

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

我也建议在变量名称中使用一致的套管。 (id,名称,标题,...)。一般来说,c#的标准是将PascalCase用于公共可用的方法/属性。

+0

感谢您的回应和建议。我通常做一个体面的工作,以符合套管,但这个项目很匆忙,我有点懒 – aBoy