[解決済み] C#:foreach内のyield returnが失敗する - bodyはイテレータブロックにできない
2022-02-26 01:01:32
質問
この難読化されたコードの一部を考えてみましょう。このコードでは、匿名コンストラクタと
yield return
それを 目標は、ローカル・コレクションを維持する必要がなく、単に
return
となります。
public static List<DesktopComputer> BuildComputerAssets()
{
List<string> idTags = GetComputerIdTags();
foreach (var pcTag in idTags)
{
yield return new DesktopComputer() {AssetTag= pcTag
, Description = "PC " + pcTag
, AcquireDate = DateTime.Now
};
}
}
残念ながら、このコードでは例外が発生します。
エラー28 'System.Collections.Generic.List' はイテレータインターフェイス型ではないため、 'Foo.BuildComputerAssets()' のボディはイテレータブロックにはなりえません。
質問内容
- このエラーメッセージは何を意味しているのですか?
-
どうすればこのエラーを回避して
yield return
を正しく使うことができますか?
解決方法は?
を使用することができます。
yield return
を返す関数で
IEnumerable
または
IEnumerator
ではなく
List<T>
.
を返すように関数を変更する必要があります。
IEnumerable<DesktopComputer>
.
あるいは、この関数を書き換えて、次のように使うこともできます。
List<T>.ConvertAll
:
return GetComputerIdTags().ConvertAll(pcTag =>
new DesktopComputer() {
AssetTag = pcTag,
Description = "PC " + pcTag,
AcquireDate = DateTime.Now
});
関連
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み】Swashbuckle/Swagger + ASP.Net Core: "Failed to load API definition" (API定義の読み込みに失敗しました
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み] イールドリターン」の正しい使い方
-
[解決済み】yield returnを使ったIEnumerableとRecursionについて
-
[解決済み] yield return で全ての列挙体をループさせることなく一度に返す。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メンバー '<メンバー名>' にインスタンス参照でアクセスできない
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み】ORA-01008: すべての変数がバインドされていません。これらはバインドされています。
-
[解決済み】Socket.Selectがエラー "An operation was attempted on something that is not a socket" を返す。
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み] 2つのリストを結合する
-
[解決済み】URLから画像をダウンロードする方法