是否有LINQ函数用于获取字符串列表中最长的字符串?

是否有一个LINQ函数,或者必须自己编码,如下所示:

 static string GetLongestStringInList() { string longest = list[0]; foreach (string s in list) { if (s.Length > longest.Length) { longest = s; } } return longest; } 

这只需要一次循环迭代:

 list.Aggregate("", (max, cur) => max.Length > cur.Length ? max : cur); 

您可以使用: list.OrderByDescending(s => s.Length).First();

 var list = new List(); // or string[] or any list.Add("a"); list.Add("ccc"); list.Add("bb"); list.Add("eeeee"); list.Add("dddd"); // max-length var length = list.Max(s => s.Length); // biggest one var biggest = list.FirstOrDefault(s => s.Length == length); // if there is more that one by equal length var biggestList = list.Where(s => s.Length == length); // by ordering list var biggest = list.OrderByDescending(s => s.Length).FirstOrDefault(); // biggest-list by LINQ var bigList2 = from s in list where s.Length == list.Max(a => a.Length) select s; // biggest by LINQ var biggest2 = bigList2.FirstOrDefault(); 

您想要的方法通常称为“MaxBy”,遗憾的是,它不包含在标准的序列运算符集中。 幸运的是,写自己很容易。 有关实施,请参阅此答案:

Linq组通过子查询

要获取对象/字符串列表中最长的字符串,请尝试以下操作:

 List list = new List(); list.Add("HELLO"); list.Add("HELLO WORLD"); String maxString = list.OrderByDescending(x => x.Length).First(); 

变量maxString将包含值"HELLO WORLD"

如果有多个具有相同长度的字符串,则添加ThenBy()以保证返回顺序

 var longest = list.OrderByDescending(s => s.Length) .ThenBy(s => s) .FirstOrDefault();