[解決済み】yield returnを使ったIEnumerableとRecursionについて
2022-03-27 17:38:45
質問
私は
IEnumerable<T>
メソッドを使用して、WebForms ページ内のコントロールを検索しています。
このメソッドは再帰的に実行されるのですが、このメソッドが実行されたときに希望の型が返されないという問題があります。
yield return
は、再帰呼び出しの値を返します。
私のコードは以下のようになります。
public static IEnumerable<Control> GetDeepControlsByType<T>(this Control control)
{
foreach(Control c in control.Controls)
{
if (c is T)
{
yield return c;
}
if(c.Controls.Count > 0)
{
yield return c.GetDeepControlsByType<T>();
}
}
}
これは現在、"Cannot convert expression type" エラーを投げています。しかし、このメソッドが型
IEnumerable<Object>
の場合、コードはビルドされますが、出力には間違った型が返されます。
を使用する方法はありますか?
yield return
再帰を使いながら?
どのように解決するのですか?
を返すメソッドの内部で
IEnumerable<T>
,
yield return
を返さなければなりません。
T
でなく
IEnumerable<T>
.
交換
yield return c.GetDeepControlsByType<T>();
を使っています。
foreach (var x in c.GetDeepControlsByType<T>())
{
yield return x;
}
関連
-
[解決済み] 関数を終了するには?
-
[解決済み] C#で「yield break;」は何をするのか?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み] イールドリターン」の正しい使い方
-
[解決済み] IEnumerable<T>のforeachのLINQでの等価性
-
[解決済み] IEnumerable<T> / IQueryable<T>の動的なLINQ OrderBy
-
[解決済み] IEnumerable<T> として単一の項目を渡す
-
[解決済み】C#のyieldキーワードは何に使われるのか?
-
[解決済み】IEnumerable vs List - What to Use? どのように動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「未割り当てのローカル変数を使用」とはどういう意味ですか?
-
[解決済み】Ajax処理で「無効なJSONプリミティブ」と表示される件
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み] 保護レベルによりアクセス不能になりました。
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み] yield (return)を使ってはいけない場合 [重複]について