将字符串连接实用程序函数转换为LINQ等效项

时间:2013-06-04 01:07:37

标签: c# string linq

所以我有一个辅助函数,它接受一个特定的列表,执行循环并返回一个用逗号连接的字符串而不重复。

public static string GetJoinedEquipString(List<MeasuredData> dataList)
{
    HashSet<string> equipSet = new HashSet<string>();
    foreach (MeasuredData data in dataList)
    {
        equipSet.Add(data.GetEquipNumString());
    }
    return String.Join(",", equipNumSet.ToArray());
}

哪种工作正常..但是有没有办法用LINQ重写这个可怕的功能?

1 个答案:

答案 0 :(得分:3)

尝试:

string.Join(",", dataList.Select(d => d.GetEquipNumString()).Distinct().ToArray());

不要使用HashSet使列表与众不同,请查看Distinct,记录here。这将使用string的默认相等比较器(与您的实现一样),但如果您使用的是更复杂的对象,还会有一个接受IEqualityComparer的重载。

如果您使用的是.NET 4.0或更高版本,则可以取消对ToArray的调用,因为添加了Join的重载,其中IEnumerable<string>作为参数(如反对string[]}。