我是C#编程的新手,遇到了一些我无法过去的障碍。
我收到了这个编译错误:
CS0305:使用泛型类型'System.Collections.Generic.IEnumerable'需要1个类型的参数
使用此代码;
class Program
{
static void Main(string[] args)
{
Car c = new Car();
c.PetName = "Frank";
c.Speed = 55;
c.colour = "Green";
Console.WriteLine("Name = : {0}", c.PetName);
c.DisplayStats();
Garage carLot = new Garage();
// Hand over each car in the collection
foreach (Car c in carLot)
{
Console.WriteLine("{0} is going {1} MPH",
c.PetName, c.CurrentSpeed);
}
Console.ReadLine();
}
class Car
{
//Automatic Properties
public string PetName { get; set; }
public int Speed { get; set; }
public string colour { get; set; }
public void DisplayStats()
{
Console.WriteLine("Car Name: {0}", PetName);
Console.WriteLine("Speed: {0}", Speed);
Console.WriteLine("Color: {0}", colour);
}
}
public class Garage
{
private Car[] CarArray = new Car[4];
// Fill with some car objects on startup.
public Garage()
{
carArray[0] = new Car("Rusty", 30);
carArray[1] = new Car("Clunker", 55);
carArray[2] = new Car("Zippy", 30);
carArray[3] = new Car("Fred", 30);
}
}
public IEnumerator GetEnumerator()
{
foreach (Car c in carArray)
{
yield return c;
}
}
}
我该如何解决这个问题?
答案 0 :(得分:6)
IEnumerable
有两种变体,泛型变体(位于System.Collections.Generic
名称空间中)接受一个类型参数,该参数指定了可枚举所包含的对象类型。另一个(包含在System.Collections
命名空间中)没有类型参数,因此暴露类型object
- 您似乎在声明/使用非泛型变体,但是没有使用{{1命名空间。
我认为修复特定编译错误的快速方法是将以下内容放在源代码文件的顶部:
System.Collections
或者,您可以通过在声明using System.Collections;
时指定类型参数来使用Generic版本(您应该尽可能尝试这样做,因为它是类型安全的),如下所示:
IEnumerable
您可能还想阅读An Introduction to C# Generics
您似乎还有一些错误,但这些似乎可能来自复制和粘贴源的问题(特别是 IEnumerable<Car>
IEnumerator<Car>
未实现Garage
,无论是通用还是非-generic版本,IEnumerable
类位于GetEnumerator
类,而不是Program
类。
答案 1 :(得分:1)
你有更多的错误。但是专门针对该错误,您在Garage
中循环foreach
,但该类不公开枚举器,主要是因为方法GetEnumerator
实际上在类之外。将方法移到Garage
内,然后您将能够一直到达下一次崩溃的场景。
实际上,对于该错误,您需要using System.Collections;
和然后,您需要移动GetEnumerator
方法。就像我说的,你在这段代码中有很多错误。
答案 2 :(得分:0)
你有很多错别字。正如其他人所说,您的具体答案是您需要在您的类Garage语句中添加“:IEnumerable”。
这里的代码足够严密,可以完全编译:
class Program
{
static void Main (string[] args)
{
Car c = new Car ("Frank", 55);
c.colour = "Green";
Console.WriteLine ("Name = : {0}", c.PetName);
c.DisplayStats ();
Garage carLot = new Garage ();
// Hand over each car in the collection
foreach (Car ch in carLot) {
Console.WriteLine ("{0} is going {1} MPH", ch.PetName, ch.Speed);
}
Console.ReadLine ();
}
class Car
{
//Automatic Properties
public string PetName { get; set; }
public int Speed { get; set; }
public string colour { get; set; }
public void DisplayStats ()
{
Console.WriteLine ("Car Name: {0}", PetName);
Console.WriteLine ("Speed: {0}", Speed);
Console.WriteLine ("Color: {0}", colour);
}
public Car(string petname, int speed) { PetName = petname; Speed = speed; }
}
public class Garage : IEnumerable
{
private Car[] carArray = new Car[4];
// Fill with some car objects on startup.
public Garage ()
{
carArray[0] = new Car ("Rusty", 30);
carArray[1] = new Car ("Clunker", 55);
carArray[2] = new Car ("Zippy", 30);
carArray[3] = new Car ("Fred", 30);
}
public IEnumerator GetEnumerator ()
{
foreach (Car c in carArray) {
yield return c;
}
}
}
}