0

他のオブジェクトのいくつかのリストを含むオブジェクトモデルがあります。リスト内のすべてのオブジェクトをループして、それらに対してメソッドを実行したいと思います。このメソッドはMyMethodと呼ばれ、リスト内のすべてのオブジェクトのクラス定義にこのメソッドが含まれています。

これは私が持っているものです:

public class MyObject
{
  public List<NestedObject1> ListNestedObject1 { get; set; }
  public List<NestedObject2> ListNestedObject2 { get; set; }

  public void ExecuteMethodsOfNestedObjectLists()
  {
    if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod();}
    if (ListNestedObject2.Count > 0) { from a in ListNestedObject2 a.MyMethod();}
  }
}

ネストされたオブジェクトの各リストの長さをテストし、各要素に対してMyMethodを実行しようとしています。foreachループを実行できることはわかっていますが、linq構文を使用して短くする方法を確認したいと思います。

これを書き直して機能させるにはどうすればよいですか?

ありがとう。

4

4 に答える 4

2

では、ネストされたすべてのオブジェクトに対してこのメ​​ソッドを実行する方法を尋ねているのでしょうか。

ListNestedObject1.ForEach(obj => obj.MyMethod());
ListNestedObject2.ForEach(obj => obj.MyMethod()); 

注:List.ForEachこれはLINQではなく(外観は似ていますが)、.NET2.0で導入されました。

于 2012-05-23T15:34:28.060 に答える
1

foreachループを使用する必要があります。それが目的です。

Linqはデータのクエリ用に設計されており、副作用を引き起こすために使用されるようには設計されていません。あなたが探しているのはLinqForEach拡張メソッドのようです。Eric Lippertが、興味がある場合に、これが言語から意図的に省略された理由を詳しく説明します

もちろん、これらの哲学的問題を無視して、独自のForEach方法を書くことは自由です。

于 2012-05-23T15:32:17.267 に答える
0

それ以外の

 if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod(); }

使用する

    if (ListNestedObject1.Count > 0)
    { 
        ListNestedObject1.Select(
        a=>
            { 
                a.MyMethod(); 
                return a;
            } 
    }

同様にクエリを置き換えますListNestedObject2

于 2012-05-23T15:32:10.200 に答える
0

からForEach拡張メソッドを使用できます。これは、実際にはループList<T>とまったく同じです。foreachこれはでは利用できないことに注意してください。一般に、これをループIEnumerable<T>の代わりに使用する必要があるかどうかについては、非常に議論されています。foreach

MyObject.ListNestedObject1.ForEach(MyMethod);
MyObject.ListNestedObject2.ForEach(MyMethod);
于 2012-05-23T15:34:15.063 に答える