//create the new object for cars
Cars s1 = new Cars("Toyota", 2005, 500000, "White", "good");//Car1 Ob
Cars s2 = new Cars("Honda", 2004, 550000, "Black", "fine");//Car2 Ob
Cars s3 = new Cars("Nissen", 2012, 490000, "Yellow", "best");//Car3 Ob
Cars s4 = new Cars("Suzuki", 2012, 390000, "Blue", "fine");//Car4 Ob
Cars s5 = new Cars("BMW", 2012, 1000000, "Green", "Good");//Car5 Ob
//Create list to add objects into the memory
List<Cars> list1 = new List<Cars>();
list1.Add(s1);list1.Add(s2);list1.Add(s3);list1.Add(s4);list1.Add(s5);
//cars info which has the lowest price
double lowest_price = 0;
foreach(Cars a in list1){
if(a.price <= lowest_price){
lowest_price = a.price;
Console.WriteLine(a.price);
}
}//end of loop
这是我试图打印出价格最低的汽车信息的代码。但是什么都没有打印出来。
答案 0 :(得分:47)
使用LINQ Min
扩展名方法:
double lowest_price = list1.Min(car => car.price);
此外,您没有指定,但如果您的集合中没有汽车,并且InvalidOperationException
表示“序列不包含任何元素”,则此操作将失败。如果您可能没有汽车,可以快速更新:
double lowest_price = list1.Any() ? list1.Min(car => car.price) : 0;
至于为什么你的当前代码没有打印出来,因为你的初始值是0
。没有汽车的值负(或小于0
)。如果要继续使用现有循环,请将初始值更改为可能的最高值:
double lowest_price = Double.MaxValue;
foreach(Cars a in list1){
if(a.price <= lowest_price){
lowest_price = a.price;
Console.WriteLine(a.price);
}
}//end of loop
请注意,如果您的list1
汽车为空,则会产生额外的副作用,lowest_price
值将为Double.MaxValue
。使用现有代码可能会或可能不会引起您的关注。
如果这是一个问题,需要在没有汽车的情况下返回0
,您可以稍作调整:
double lowest_price;
if (list1.Any()){
lowest_price = Double.MaxValue;
foreach(Cars a in list1){
if(a.price <= lowest_price){
lowest_price = a.price;
Console.WriteLine(a.price);
}
}//end of loop
}
else{
lowest_price = 0;
}
答案 1 :(得分:10)
您可以在列表中使用Min扩展名。
lowest_price = list1.Min(c => c.price);
答案 2 :(得分:3)
仅基于您的代码问题:您的价格不会低于0 ...所以您需要将其更改为:
double lowest_price = list1[0].price;
foreach(Cars a in list1){
if(a.price <= lowest_price){
lowest_price = a.price;
Console.WriteLine(a.price);
}
}//end of loop
修改 :这仅在list1
存在且非空时才有效,一般情况下您需要检查if (list1 is null || list1.Count==0)
第一行。
答案 3 :(得分:2)
如果您想修复您的代码(而不是使用Linq - 这是推荐的方法),请更改此行:
double lowest_price = 0;
到此:
double lowest_price = double.MaxValue;
答案 4 :(得分:0)
其他响应正确提供了LINQ解决方案,但您的特定代码的问题在于您正在检查汽车的定价(a.price)是否是&lt; =您的lowest_price变量。您的lowest_price变量将使用值0进行实例化,并且根据列出的默认汽车价格均大于0,将永远无法验证。因此,您的lowest_price变量永远不会更新,因此永远不会将其值写入控制台。这就是导致你的“没有打印出来”的要求。这是您的支票和逻辑中的错误。将该行更新为“if(lowest_price&lt; = a.price)”以便更接近。
答案 5 :(得分:0)
public static int FindMin(IEnumerable<int> numbers)
{
Expression<Func<int, int, int>> expression = (left, right) => left < right ? left : right;
InvocationExpression invoker = Expression.Invoke(expression,
Expression.Constant(numbers.First())
, Expression.Constant(numbers.ToList()[1]));
foreach (int number in numbers.Skip(2))
{
invoker = Expression.Invoke(expression,
invoker,
Expression.Constant(number));
}
var lambdaExpression = Expression.Lambda<Func<int>>(invoker);
Console.WriteLine($"Expression call tree:{lambdaExpression.ToString()}");
return lambdaExpression.Compile().Invoke();
}
}
答案 6 :(得分:0)
var result = list1.Where((x) => x.price== list1.Min(y => y.price)).ToList();
这将以最低价格返回汽车信息。添加参考using System.Linq;