如何使用对象的参数

本文关键字:参数 对象 何使用 | 更新日期: 2023-09-27 18:34:46

我在这个代码中有一个错误,foreach循环中的错误和方法中对象的参数。

这是我的代码:

class car
{
    private int Id;
    private string make;
    private string model;
    private Colore c;
    private int value;
    public int ID { get; set; }
    public string make { get; set;  }
    public string model { get; set; }
    public int value { get; set; }
    public void Display(params car[] list)
    {
        int summ=0;
        foreach(car i in list)
            Console.WriteLine(list[i].value);
        foreach (car i in list)
            summ += list[i].value;
        Console.WriteLine(summ); 
    } 
}

如何使用对象的参数

您似乎混淆了forforeach循环。

在基本层面上,for遍历数组的索引,并在每次迭代时为您提供当前索引。所以你会这样做:

for(int i=0; i<list.Length; i++)
    Console.WriteLine(list[i].value);

另一方面,foreach 遍历数组本身的元素,并为您提供当前元素。这是如何使用它

foreach(car i in list)
    Console.WriteLine(i.value);

如果你在car[]数组中使用foreach to loop,你应该直接使用这个对象:

int summ=0;
foreach (car i in list)
{
   summ += i.value
}

使用 params 参数很好。但是,还有其他错误。

  1. 不能拥有与私有字段同名的属性

public string make { get; set;  }
private string make;

由于您已经使用了自动属性{get; set;},因此您根本不需要定义支持字段(即只需删除private string make;

  1. 您还误解了foreach的使用 - 它枚举数组,从而避免了将索引器应用于数组的需要:

foreach (car i in list)
    Console.WriteLine(i.make);

在这里,当您迭代数组时,i将返回对 params 数组中每个car对象的引用。该变量最好命名为car,并且list不是params参数的理想名称,因为它实际上是一个array

此外,鉴于 Display 不以任何方式与this交互,它可以成为静态的,甚至是外部扩展方法,例如,您可以将代码更改为此(我对变量命名约定采取了一些自由(:

class Car
{
    public int Id { get; set; }
    public string Make { get; set;  }
    public string Model { get; set; }
    public int Value { get; set; }
    public static void Display(params car[] cars)
    {
        int summ=0;
        foreach(var car in cars)
            Console.WriteLine(car.Value);
        foreach (car i in list)
            summ += car.Value;
        Console.WriteLine(summ); 
    } 
}

并像这样打电话:

Car.Display(new Car{Make = "Toyota", Value = 1000}, 
            new Car{Make = "Ferrari", Value = 5000});