如何使用对象的参数
本文关键字:参数 对象 何使用 | 更新日期: 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);
}
}
您似乎混淆了for
和foreach
循环。
在基本层面上,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
参数很好。但是,还有其他错误。
- 不能拥有与私有字段同名的属性
public string make { get; set; }
private string make;
由于您已经使用了自动属性{get; set;}
,因此您根本不需要定义支持字段(即只需删除private string make;
- 您还误解了
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});