web-dev-qa-db-ja.com

varとforeachを使用して暗黙的に型指定されたローカル変数にvoidを割り当てることはできません

フォームからコード付きのリストにすべてのボタン名をリストしようとしています

var v = new List<Form1>() { this }.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });

常にエラーが発生します

暗黙的に型指定されたローカル変数にvoidを割り当てることはできません

それを回避する方法は?

7
tonni

Foreachvoidを返します。そのため、エラーが発生します。割り当ての右側にあるあなたのステートメントは何も返していません。次のような2つのステートメントで同じことを行うことができます。

var v = new List<Form1>() { this };
v.ForEach(x => { x.GetType().Name.Contains(typeof(Button).Name); });

現在のコードでは、新しいList<Form1>を作成してから、リスト内の各項目を繰り返し処理していますが、何も返されていません。

Jon Skeetがコメントで指摘しているように、リストには何の影響もありません。私はあなたができるフォームのリストからすべてのボタンを取得しようとしていると思います:

var allButtons = v.SelectMany(r => r.Controls.OfType<Button>()).ToList();
15
Habib

あなたが本当にWhereを探しているのではないかと思います-Contains呼び出しでForEachを呼び出すだけでは、何も起こりません。同様に、ボタンに興味がある場合は、フォームのリストを実際に探しているとは思いません。私はあなたが探しているかもしれないと思う:

var buttons = this.Controls.OfType<Button>().ToList();

これはネストされたコントロールには適用されないことに注意してください。これを行う必要がある場合は、再帰的なものが必要になります。 (それを求める他の質問を見つけることができるかもしれません...これがWinForms、WebForms、または他の何かであるかどうかがわからないことは助けにはなりません...)

5
Jon Skeet