C# 如何从列表中找到最低值? //为汽车创建新对象 汽车s1=新车(“丰田”,2005,500000,“白色”,“良好”)//角豆 汽车s2=新车(“本田”,2004,550000,“黑色”,“精细”)//角豆 汽车s3=新车(“尼森”,2012年,490000辆,“黄色”,“最佳”)//角豆 汽车s4=新车(“铃木”,2012,390000,“蓝色”,“精细”)//角豆 汽车s5=新车(“宝马”,2012,1000000,“绿色”,“良好”)//角豆 //创建列表以将对象添加到内存中 List list1=新列表(); 列表1.添加(s1);列表1.添加(s2);列表1.添加(s3);列表1.添加(s4);列表1.添加(s5); //价格最低的汽车信息 双倍最低价格=0; foreach(列表1中的车辆a){ 如果(a.price

C# 如何从列表中找到最低值? //为汽车创建新对象 汽车s1=新车(“丰田”,2005,500000,“白色”,“良好”)//角豆 汽车s2=新车(“本田”,2004,550000,“黑色”,“精细”)//角豆 汽车s3=新车(“尼森”,2012年,490000辆,“黄色”,“最佳”)//角豆 汽车s4=新车(“铃木”,2012,390000,“蓝色”,“精细”)//角豆 汽车s5=新车(“宝马”,2012,1000000,“绿色”,“良好”)//角豆 //创建列表以将对象添加到内存中 List list1=新列表(); 列表1.添加(s1);列表1.添加(s2);列表1.添加(s3);列表1.添加(s4);列表1.添加(s5); //价格最低的汽车信息 双倍最低价格=0; foreach(列表1中的车辆a){ 如果(a.price,c#,C#,使用扩展方法: //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", "bes

使用扩展方法:

 //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
此外,您没有指定,但如果您的集合中没有车辆,并且
InvalidOperationException
指示“序列不包含元素”,则此操作将失败。如果您可能没有车辆,则快速更新可能是:

double lowest_price = list1.Min(car => car.price);

至于为什么当前代码不打印,是因为初始值为
0
。没有一辆车的值为负值(或小于
0
)。如果要继续使用现有循环,请将初始值更改为可能的最高值:

double lowest_price = list1.Any() ? list1.Min(car => car.price) : 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;
}

仅基于代码的问题:您的价格不会低于0…因此您需要将其更改为:

lowest_price = list1.Min(c => c.price);
双倍最低价格=list1[0]。价格;
foreach(列表1中的车辆a){

如果(a.price其他响应正确地提供了LINQ解决方案,但您的特定代码的问题是您正在检查汽车的定价(a.price)是否,如果您希望修复代码以使其正常工作(而不是使用LINQ-这是推荐的方法),请更改此行:

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
为此:

double lowest_price = 0;
public static int FindMin(IEnumerable number)
{
表达式=(左,右)=>左<右?左:右;
InvocationExpression invoker=Expression.Invoke(表达式,
Expression.Constant(numbers.First())
常量(numbers.ToList()[1]);
foreach(整数表示数字。跳过(2))
{
invoker=Expression.Invoke(表达式,
调用者,
表达式。常数(数));
}
var lambdaExpression=Expression.Lambda(调用程序);
WriteLine($“表达式调用树:{lambdaExpression.ToString()}”);
返回lambdaExpression.Compile().Invoke();
}
}

这将返回最低价格的汽车信息。使用系统添加参考
。Linq;

所有
a.price
都不小于0。
a.price也就是你正在打印
a.price
-你不想打印
最低价格吗?哦..对!!它总是假的!!谢谢!!你应该用单数命名你的班级,比如one
Car
。复数名称可能表示某种类型的集合,如许多
Cars
。这是一种常见的做法,可以让您的代码更容易理解。通常,如果您使用此模式查找最小值,则应将控制变量设置为可能的最大值。这样您应该至少命中一次。谢谢s!!我马上就去试试!这正是我今天学到的技巧!!再次感谢!除了使用.MaxValue,-1或其他外来值之外,还可以使用可为空的值类型:if(!lost.HasValue | a.Pricedouble lowest_price = 0;
double lowest_price = double.MaxValue;
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();
    }
}
var result = list1.Where((x) => x.price== list1.Min(y => y.price)).ToList();