[解決済み] IEnumerable<T> として単一の項目を渡す
2022-03-24 08:28:20
質問
タイプの単一の項目を渡す一般的な方法はありますか?
T
を期待するメソッドに
IEnumerable<T>
パラメータは?言語はC#、フレームワークのバージョンは2.0です。
現在、私はヘルパーメソッドを使用していますが(.Net 2.0なので、LINQに似たキャスト/投影ヘルパーメソッドが一杯あります)、これはただバカバカしいと思うだけです。
public static class IEnumerableExt
{
// usage: IEnumerableExt.FromSingleItem(someObject);
public static IEnumerable<T> FromSingleItem<T>(T item)
{
yield return item;
}
}
その他の方法としては、もちろん
List<T>
または
Array
の代わりにそれを渡します。
IEnumerable<T>
.
[編集]をクリックします。 拡張メソッドとして、名前がつくかもしれません。
public static class IEnumerableExt
{
// usage: someObject.SingleItemAsEnumerable();
public static IEnumerable<T> SingleItemAsEnumerable<T>(this T item)
{
yield return item;
}
}
何か見逃していませんか?
[編集2]
私たちは
someObject.Yield()
(@Peter が下のコメントで提案したように) が、主に簡潔さのために、この拡張メソッドに最適な名前でしたので、誰かがそれを取得したい場合は、ここに XML のコメントと一緒にあります。
public static class IEnumerableExt
{
/// <summary>
/// Wraps this object instance into an IEnumerable<T>
/// consisting of a single item.
/// </summary>
/// <typeparam name="T"> Type of the object. </typeparam>
/// <param name="item"> The instance that will be wrapped. </param>
/// <returns> An IEnumerable<T> consisting of a single item. </returns>
public static IEnumerable<T> Yield<T>(this T item)
{
yield return item;
}
}
解決方法は?
あなたのヘルパーメソッドは、最もクリーンな方法だと思います。リストや配列を渡すと、不謹慎なコードがそれをキャストして中身を変えてしまい、状況によってはおかしな挙動になる可能性があります。読み取り専用のコレクションを使うこともできますが、その場合、さらに多くのラッピングが必要になるでしょう。しかし、この解決策は、とても良い方法だと思います。
関連
-
[解決済み] 関数を終了するには?
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み] IList<string> または IEnumerable<string> からカンマ区切りリストを作成する。
-
[解決済み] IEnumerable<T>のforeachのLINQでの等価性
-
[解決済み] IEnumerable<T> / IQueryable<T>の動的なLINQ OrderBy
-
[解決済み] 空のIEnumerableを返すにはどうしたらいいですか?
-
[解決済み] IEnumerable<T> からアイテムを反復せずにカウントする?
-
[解決済み】IEnumerable<T>コレクションにアイテムを追加するにはどうすればよいですか?
-
[解決済み】yield returnを使ったIEnumerableとRecursionについて
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】スクリプトクラスが見つからないので、スクリプトコンポーネントを追加できない?
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】値をNULLにすることはできません。パラメータ名:source
-
[解決済み】Linq 構文 - 複数列の選択
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】IntPtrとは一体何なのか?
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。