如何使用对象的参数

时间:2014-12-19 13:30:16

标签: c#

我在这段代码中出错,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); 

    } 
}

3 个答案:

答案 0 :(得分:5)

您似乎混淆了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);

答案 1 :(得分:2)

如果使用foreach在car []数组中循环,则应直接使用该对象:

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

答案 2 :(得分:2)

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

  1. 您不能拥有与私有字段同名的媒体资源
  2. public string make { get; set;  }
    private string make;
    

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

    1. 您还误解了foreach的使用 - 它枚举了数组,从而避免了将索引器应用于数组的需要:
    2. 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});