2017-04-14 8 views
1

私は、構造変数を受け入れてboolを返すことになっているメソッドを持っています。おそらく構文上、おそらくこれはうまくいきます。私は構造体変数のフィールド(newGuy)にデータを渡し、その後、上記の方法にnewGuyを渡していますボタンクリック方法、で後で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が割り当てられていないローカル変数であることを告げています。

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

newGuyをオペレータnewで初期化する必要があります。あなたは宣言でそのフィールドの初期化を組み合わせることができます。

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; 
... 

あなたはまた、「VaRのnewGuy =新しい従業員として、それを書くことができます(); ' (あなたが尋ねる人によっては、これはより良い構文です...)

あなたはまた、のようなあなたのオブジェクトを作成することができます。(注意 - これがアクセスできるようにあなたの「設定」の方法が必要です)

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

変数名に一貫したケーシングを使用することもお勧めします。 (ID、名前、タイトル、...)。一般に、c#の標準は、公開されているメソッド/プロパティにPascalCaseを使用することです。

+0

応答と提案に感謝します。私は通常ケーシングとの一貫性でまともな仕事をしますが、このプロジェクトは急いでおり、少し怠けています – aBoy

関連する問題