将类中的字符串添加到List <string>?</string>的简写方法

时间:2012-09-28 10:12:53

标签: c# list

我有以下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可以为空。

5 个答案:

答案 0 :(得分:4)

听起来你可以使用:

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

请注意,此表达式:myObject.myClass.subclass表明您违反了Law of Demeter,而且希望命名实际上并不反映现实......如果你可以提供更具指示性的表达式,这将有很大的帮助。

答案 1 :(得分:4)

您可以使用AddRange方法将IEnumerable的所有元素添加到列表中:

if (myObject.myClass != null) {
    names.AddRange(myObject.myClass.subClass.Select(c => c.Name));
}

答案 2 :(得分:1)

您可以在列表中使用AddRange方法。

答案 3 :(得分:0)

您可以使用LINQ构建列表,但请注意,它仍然是枚举以构建列表:

var names = myObject.myClass.subClass.Select(x => x.Name).ToList();

答案 4 :(得分:0)

目前尚不清楚什么是集合,什么不是。所以我假设myObject.myClass已经是一个集合(IEnumerable<myClass>),可以为null,myClass.subClassIEnumerable<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.SelectMany

请注意,您需要添加using System.Linq