ホームページ > バックエンド開発 > C++ > C# で「IEnumerable が複数列挙される可能性があります」という警告に対処するにはどうすればよいですか?

C# で「IEnumerable が複数列挙される可能性があります」という警告に対処するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-04 06:54:40
オリジナル
520 人が閲覧しました

How Can I Handle the

IEnumerable の複数列挙の可能性に関する警告への対処

プログラミングでは、IEnumerable インスタンスが次の場合に「IEnumerable の複数列挙の可能性」という警告が発生します。メソッド内で複数回反復されます。この問題は、反復子に状態があり、後続の列挙で異なる結果が得られたり、例外がスローされる可能性があるために発生します。

提供されたサンプル コードでは、

public List<object> Foo(IEnumerable<object> objects)
{
    // ...
}
ログイン後にコピー

objects パラメーターは IEnumerable として宣言されています。 、オブジェクトのリスト、配列、シーケンスなどの列挙可能なコレクションである可能性があることを示します。ただし、この宣言では、コレクションが複数の列挙に耐えられるかどうかは指定されていません。

代替ソリューション

提案されるソリューションは次のとおりです。

  • 代わりにリスト/ICollection を渡す: このアプローチでは、呼び出し元が固定の ICollection を渡すように制限されます。
  • メソッド開始時のリストへの変換: この解決策には、IEnumerable 全体を新しいリストにコピーすることが含まれますが、特定の場合には非効率的で扱いにくい場合があります。シナリオ。

最適解決策

推奨される一連のアクションは、メソッドの特定の要件と呼び出し元の予期される動作によって異なります。

メソッドが複数回列挙できる固定コレクションを予期している場合は、パラメータを IList/ICollection として宣言することをお勧めします。これにより、呼び出し元に期待が明確に伝えられ、一度だけ列挙されると期待されている高価なオブジェクトを誤って渡すことがなくなります。

あるいは、メソッドが IEnumerable を受け入れる必要があり、複数の列挙が必要な場合は、次のようにすることもできます。メソッドの開始時に .ToList() 変換を実行します。ただし、潜在的なパフォーマンスへの影響を考慮して、このアプローチは慎重に使用する必要があります。

.NET には、追加/削除機能のないカウントおよびインデクサー アクセスを備えた列挙可能なコレクション用に特別に設計されたインターフェイスがないことに注意することが重要です。この問題を解決するには理想的です。

以上がC# で「IEnumerable が複数列挙される可能性があります」という警告に対処するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート