1. ホーム
  2. c#

[解決済み] LINQでコレクションの全要素に関数を適用する【重複】。

2022-05-04 11:05:52

質問

私は最近LINQを使い始めたのですが、その素晴らしさに驚いています。LINQを使えば、foreachを使わずに、コレクションのすべての要素に関数(どんな関数でも)を適用できるのではないかと思っていたんだ。Pythonのラムダ関数のようなものです。

例えば、int型のリストがある場合、LINQを使用してすべての要素に定数を追加することはできますか?

DBテーブルがある場合、LINQを使用してすべてのレコードのフィールドを設定することができます。

私はC#を使用しています

どのように解決するのですか?

一般的なアプローチ方法としては、自前の ForEach のジェネリックメソッドです。 IEnumerable<T> . 以下は、私たちが MoreLINQ :

public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
    source.ThrowIfNull("source");
    action.ThrowIfNull("action");
    foreach (T element in source)
    {
        action(element);
    }
}

(ここで ThrowIfNull は任意の参照型に対する拡張メソッドであり、これは明白なことを行う)。

これが.NET 4.0に含まれるかどうか、興味深いところです。LINQの機能的なスタイルに反していますが、多くの人がこれを便利だと感じていることは間違いありません。

それができれば、次のようなことが書けるようになる。

people.Where(person => person.Age < 21)
      .ForEach(person => person.EjectFromBar());