Getting an IList<field_type> from IList<object_type

本文关键字:lt type IList from object gt field an Getting | 更新日期: 2023-09-27 18:14:36

我有一个IList<Person>对象。Person类有字段,FirstName, LastName

我有一个接受IList<string>的函数,我想以与IList<Person>对象相同的顺序传递FirstNames列表。有没有一种方法可以做到这一点,而不需要从Person列表中建立所有名称的列表?

如果我可以改变函数以采用不同的参数(除了ILIst<Person>,该函数特定于字符串,而不是人物),也许是IEnumerable<string> ?我宁愿使用IList<string>

Getting an IList<field_type> from IList<object_type

Enumerable.Select将为您返回一个IEnumerable字符串(名字)。

http://msdn.microsoft.com/en-us/library/bb548891.aspx

myFunction(people.Select(o => o.FirstName))

如果你真的想传递一个List

,你也可以添加ToList()

myFunction(people.Select(o => o.FirstName).ToList())

Enumerable.Select是c# 3中作为LINQ的一部分引入的方法。在这里阅读更多关于LINQ的信息。请在这里查看延迟执行的简要解释

您可以让您的方法接受IEnumerable<T>(其中T是值类型)。例如:public void Foo(IEnumerable<string> firstNames) { ... }。如果你只是想迭代列表,而不是像IList<T>那样通过索引访问它,这将是有效的。

假设您对此没有问题,您可以通过执行LINQ方法来简单地构建一个Enumerator对象:myPersonsList.Select(person => person.FirstName);。由于Enumerable的工作性质(延迟执行),它比创建一个新列表,然后遍历它更有效。

我觉得上面的答案都能解决你的问题,但最好使用扩展方法,而不是你自己的方法。

粘贴示例供参考。

class Program
{
    static void Main(string[] args)
    {
        List<Person> persons = new List<Person>();
        persons.Select(c => c.FirstName).DoSomething();
    }
}
public static class StringListExtension
{
    public static int DoSomething(this IEnumerable<string> strList)
    {
        return strList.Count();
    }
}
class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}