C# 在IList中迭代对象属性而不使用循环

C# 在IList中迭代对象属性而不使用循环,c#,ilist,C#,Ilist,考虑以下情况: public class Employee { public string Name {get; set} public string Email {get; set} } public class EnployeeGroup { //List of employees in marketting public IList<Employee> MarkettingEmployees{ get; } //List of emp

考虑以下情况:

public class Employee
{
    public string Name {get; set}
    public string Email {get; set}
}

public class EnployeeGroup
{
    //List of employees in marketting
    public IList<Employee> MarkettingEmployees{ get; }

    //List of employees in sales
    public IList<Employee> SalesEmployees{ get; }
}

private EnployeeGroup GroupA;

int MarkettingCount;
string MarkettingNames;

MarkettingCount = GroupA.MarkettingEmployees.Count; //assigns MarkettingCount=5, this will always be 5-10 employees
MarkettingNames = <**how can i join all the GroupA.MarkettingEmployees.Name into a comma separated string?** >

//I tried a loop:
foreach(Employee MktEmployee in GroupA.MarkettingEmployees)
{
    MarkettingNames += MktEmployee.Name + ", ";
}
公共类员工
{
公共字符串名称{get;set}
公共字符串电子邮件{get;set}
}
公共类部署组
{
//市场营销部员工名单
公共IList MarketingEmployees{get;}
//销售部员工名单
公共IList SalesEmployees{get;}
}
私人雇员团体A组;
国际市场计数;
字符串名称;
MarketingCount=GroupA.MarketingEmployees.Count//分配MarketingCount=5,这将始终是5-10名员工
市场名称=
//我尝试了一个循环:
foreach(A组中的员工MktEmployee.MarketingEmployees)
{
marketingnames+=MktEmployee.Name+“,”;
}
循环是有效的,但我想知道:

  • 循环是最有效/最优雅的方法吗?如果没有,那么更好的选择是什么?我试过string.join,但没法用
  • 我想避开林克

  • 不管你喜欢与否,你都需要一点灵气;)


    不管你喜欢与否,你都需要一点灵气;)


    作为替代方案,您可以使用带有Append的StringBuilder,而不是在每次迭代时创建新字符串

    作为替代方案,您可以使用带有Append的StringBuilder,而不是在每次迭代时创建新字符串

    从实用角度来看,没有合理的理由避免循环。迭代是每种通用编程语言的难点

    在简单的情况下,使用LINQ非常优雅。再说一次,没有合理的理由去避免它本身


    如果你正在寻找一个相当模糊的,学术性的解决方案,总会有。但是,您的数据结构必须适应它。请注意,即使您使用它,智能编译器也会检测到它并将其优化为循环。机会对你不利

    从实用的角度来看,没有合理的理由避免循环。迭代是每种通用编程语言的难点

    在简单的情况下,使用LINQ非常优雅。再说一次,没有合理的理由去避免它本身


    如果你正在寻找一个相当模糊的,学术性的解决方案,总会有。但是,您的数据结构必须适应它。请注意,即使您使用它,智能编译器也会检测到它并将其优化为循环。机会对你不利

    这将更有效率(参见下面的警告):

    那么这个,

    foreach(Employee MktEmployee in GroupA.MarkettingEmployees)
    {
        MarkettingNames += MktEmployee.Name + ", ";
    }
    
    编辑:如果你有大量的员工,这会更有效率。然而,一个5-10的小循环实际上效率稍低。

    在小的情况下-这不会对性能造成太大的影响,但在大的情况下,回报将是巨大的。

    此外,如果要使用显式循环方法,可能最好使用以下方法修剪最后的
    “,”

    myString = myString.Trim().TrimEnd(',');
    
    下面的文章解释了何时应该使用
    StringBuilder
    连接字符串

    简而言之,在您使用的方法中:串联每次都创建一个新字符串,这显然会占用大量内存。您还需要将
    marketingnames
    的现有字符串中的所有数据复制到另一个
    MktEmployee.Name+“,”
    追加的新字符串中


    谢谢你,Jon Skeet:

    这会更有效率(请参见下面的警告):

    那么这个,

    foreach(Employee MktEmployee in GroupA.MarkettingEmployees)
    {
        MarkettingNames += MktEmployee.Name + ", ";
    }
    
    编辑:如果你有大量的员工,这会更有效率。然而,一个5-10的小循环实际上效率稍低。

    在小的情况下-这不会对性能造成太大的影响,但在大的情况下,回报将是巨大的。

    此外,如果要使用显式循环方法,可能最好使用以下方法修剪最后的
    “,”

    myString = myString.Trim().TrimEnd(',');
    
    下面的文章解释了何时应该使用
    StringBuilder
    连接字符串

    简而言之,在您使用的方法中:串联每次都创建一个新字符串,这显然会占用大量内存。您还需要将
    marketingnames
    的现有字符串中的所有数据复制到另一个
    MktEmployee.Name+“,”
    追加的新字符串中


    谢谢你,Jon Skeet:

    那你为什么要避开LINQ呢?虽然我很想知道如何在LINQ中做到这一点,但我很好奇,如果没有LINQ,是否有办法做到这一点。我想说,更好的选择是LINQ。。。。but@user3006467你不想使用循环,也不想使用Linq?这两个限制似乎都是完全武断的。@p.s.w.g作业通常是武断的。你为什么要完全避免LINQ?虽然我很想知道如何在LINQ中做到这一点,但我很好奇,如果没有LINQ,是否有办法做到这一点。我想说,更好的选择是LINQ。。。。but@user3006467你不想使用循环,也不想使用Linq?这两个限制似乎都是完全武断的。@p.s.w.g作业通常是武断的。+1因为您的编辑让我发笑(而且您的答案是100%正确)。我对LINQ相当陌生,那么这个LINQ解决方案与循环在效率、优雅性、性能等方面相比如何,可读性等?LINQ一般不比循环快,因为它也(隐式地)使用循环。但是
    string.Join
    非常有效(尤其是在列表或数组中),而且
    是可枚举的。选择
    只需投影
    Employee.Name
    。因此,在我看来,这种方法是高效、简洁、优雅的,而且最重要的是:可读性和可维护性。+1因为您的编辑让我发笑(您的答案100%正确)。我对LINQ相当陌生,那么这种LINQ解决方案在效率、优雅性、性能方面与循环相比如何,可读性等?LINQ一般不比循环快,因为它也(隐式地)使用循环。但是