【问题标题】:C# Error passing a new struct variable to a method?C# 将新的结构变量传递给方法时出错?
【发布时间】:2017-09-10 06:28:45
【问题描述】:

我有一个应该接受结构变量并返回布尔值的方法。这工作得很好——也许至少在语法方面。

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”值?
  • 当我说“为它分配一个初始值”时,我的意思是“Employee newGuy = new Employee();”局部变量必须在它所属的方法退出之前都有一个值。否则,你会得到刚刚得到的编译器错误。

标签: c# methods struct parameters arguments


【解决方案1】:

您需要使用运算符new 初始化newGuy。您可以将其字段初始化与声明结合起来:

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

【讨论】:

  • 完美。非常感谢。
【解决方案2】:

你需要实例化你的变量的一个实例——像这样:

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

你也可以写成 'var newGuy = new Employee();' (取决于你问谁,这是更好的语法......)

你也可以像这样创建你的对象:(注意——这需要你的'set'方法是可访问的)

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

我还建议在变量名中使用一致的大小写。 (id,姓名,标题,...)。一般来说,c# 的标准是对公开可用的方法/属性使用 PascalCase。

【讨论】:

  • 感谢您的回复和建议。我通常在与套管保持一致方面做得不错,但这个项目很匆忙,我有点懒
猜你喜欢
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 2021-10-26
  • 1970-01-01
  • 2015-02-12
  • 2012-01-12
  • 2016-04-20
相关资源
最近更新 更多