仅包含一个类成员的创建列表

Nic*_*ick 12 c# list

我有这个类的列表:

public class Data
{
   public string name {get; set;}
   public int width {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个只返回name属性列表的方法.像这样:

public List<string> GetAllNames()
{ return MyDataList<name>.ToList(); }
Run Code Online (Sandbox Code Playgroud)

所以,如果我有这个清单:

  1. name= Jon - width= 10
  2. name杰克 - width= 25

我想要以下列表:

  1. name =乔恩
  2. name 杰克

可能吗?

Str*_*ior 22

使用LINQ:

public List<string> GetAllNames()
{
    return MyDataList.Select(i => i.name).ToList();
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果您返回List <string>,那么您将基本上复制整个列表.如果您有一个大型列表,这可能需要时间/内存.如果您切换到使用IEnumerable <string>然后不执行.ToList(),那么您将获得几乎可以自由创建的惰性列表,并且将消耗非常少(<100bytes)的空间 (4认同)
  • @TimothyBaldridge:是的.值得注意的是,如果你使用`IEnumerable`路由,每次迭代它时都会重新评估它.您的IEnumerable也会绑定到原始对象集,因此即使您只打算使用它们中的名称,它也会阻止垃圾收集器清理所有`Data`对象.此外,如果`MyDataList`发生更改,则返回的`IEnumerable`会发生更改,如果在单独的线程中使用它,则可能会抛出异常.通常这些都不重要,但了解幕后发生的事情总是好的. (2认同)