你可以看到我试图实现一个从数组中写出最低数字的函数" arrNumbers"
class Program
{
public static IEnumerable<int> GetNumbers()
{
int[] arrNumbers = { 10, 7, 4, 8, 3, 2, 11, 27, 55, 12, 10, 23 };
return arrNumbers;
}
// Find the lowest number returned from the function GetNumbers( )
static void Main(string[] args)
{
int result1 = (from i in GetNumbers()
orderby i descending
select i).Take(1);
Console.WriteLine(result1);
}
答案 0 :(得分:1)
您的代码存在一些问题。我会一个接一个地打他们。
最大的问题是这不会编译。 Take
会返回多个项目...而您正试图将其推入单个int
变量中。相反,您可以拨打First()
:
int result1 = (from i in GetNumbers()
orderby i descending
select i).First()
第二大问题是......这是最高的......而不是最低的。您想要删除decending
:
int result1 = (from i in GetNumbers()
orderby i
select i).First()
然后..通过LINQ总是有Min()
方法,这样就不需要了所有这些:
int result1 = GetNumbers().Min();
答案 1 :(得分:0)
问题是result1仍然是IEnumerable<int>
类型,而不是int
。此外,您正在进行降序排序,这将是最高的数字。这是因为Take(1)
返回带有前1个元素的序列,而不是第一个元素。只需.First()
或更好GetNumbers().Min()
;
var result1 = GetNumbers().Min();
// OR
var result1 = (from i in GetNumbers()
orderby i
select i)
.First();
答案 2 :(得分:0)
将descending
更改为ascending
:
int result1 = (from i in GetNumbers()
orderby i ascending
select i).First();
或使用Min
:
Console.WriteLine(GetNumbers.Min());
答案 3 :(得分:0)
如果您将其更改为Take(5)
,则会在集合中获得(可能)5个元素。
同样,即使您指定了Take(1)
,您仍然要求使用一个元素进行集合。
如果您只想“获取”一条记录,可以使用First()
。
int result1 = (from i in GetNumbers()
orderby i descending
select i).First();
这实际上是否为您提供了您期望的结果是有争议的,因为它当前返回的是最大的数字,而不是最小的数字。由于您的集合只是一个原始类型(int),您可以尝试Min
或Max
,正如其他人所建议的那样。