所以我有一个辅助函数,它接受一个特定的列表,执行循环并返回一个用逗号连接的字符串而不重复。
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重写这个可怕的功能?
答案 0 :(得分:3)
尝试:
string.Join(",", dataList.Select(d => d.GetEquipNumString()).Distinct().ToArray());
不要使用HashSet
使列表与众不同,请查看Distinct
,记录here。这将使用string
的默认相等比较器(与您的实现一样),但如果您使用的是更复杂的对象,还会有一个接受IEqualityComparer
的重载。
如果您使用的是.NET 4.0或更高版本,则可以取消对ToArray
的调用,因为添加了Join
的重载,其中IEnumerable<string>
作为参数(如反对string[]
}。