2

次の C# コードがあります。

List<string> names = new List<string>();
if (myObject.myClass != null)
{
     foreach (var foo in myObject.myClass.subClass)
     {
          names.Add(foo.Name);
     }
}

オブジェクトsubClassに追加myObject.myClass.subClass.Nameするために各インスタンスを反復処理する必要なく、これを記述するより短い方法はありますか?names List<string>

また、むき出しの心myObject.myClassは null になる可能性があります。

4

5 に答える 5

4

あなたが使用できるように聞こえます:

List<string> names = myObject.myClass == null
    ? new List<string>()
    : myObject.myClass.subclass.Select(x => x.Name).ToList();

この表現に注意してください:あなたがデメテルの法則にかなりひどくmyObject.myClass.subclass違反していることを示唆しています- そして、私は名前が実際に現実を反映していないことを願っています.

于 2012-09-28T10:14:48.330 に答える
4

メソッドを使用して、 のAddRangeすべての要素をIEnumerableリストに追加できます。

if (myObject.myClass != null) {
    names.AddRange(myObject.myClass.subClass.Select(c => c.Name));
}
于 2012-09-28T10:15:02.043 に答える
1

List でAddRangeメソッドを使用できます。

于 2012-09-28T10:14:58.703 に答える
0

LINQ を使用してリストを作成できますが、リストを作成するためにまだ列挙していることに注意してください。

var names = myObject.myClass.subClass.Select(x => x.Name).ToList();
于 2012-09-28T10:15:01.953 に答える
0

何がコレクションで何がそうでないかは明確ではありません。myObject.myClassしたがって、それはすでに collection( IEnumerable<myClass>) であり、null である可能性があり、すべての名前が必要myClass.subClassであると想定しています。IEnumerable<subClass>

var classNames = from c in myObject.myClass
                 where c != null
                 from subC in c.subClass
                 where subC != null
                 select subC.Name;
List<String> names = classNames.ToList();

これは LINQ クエリであり、Enumerable.SelectManyin メソッド構文と同等です。

を追加する必要があることに注意してくださいusing System.Linq

于 2012-09-28T10:16:29.160 に答える