我在这段代码中出错,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);
}
}
答案 0 :(得分:5)
您似乎混淆了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);
答案 1 :(得分:2)
如果使用foreach在car []数组中循环,则应直接使用该对象:
int summ=0;
foreach (car i in list)
{
summ += i.value
}
答案 2 :(得分:2)
使用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});