C#中的通用foreach循环

给定以下代码,编译器告诉我“使用未分配的局部变量’x’。” 有什么想法吗?

public delegate Y Function(X x); public class Map { private Function F; public Map(Function f) { F = f; } public Collection Over(Collection xs){ List ys = new List(); foreach (X x in xs) { X x2 = x;//ys.Add(F(x)); } return ys; } } 

在解决了明显的错误后,它对我来说很好。

 public delegate Y Function(X x); public class Map { private Function F; public Map(Function f) { F = f; } public ICollection Over(ICollection xs){ List ys = new List(); foreach (X x in xs) { X x2 = x;//ys.Add(F(x)); } return ys; } } 

语言规范将foreach语句定义为while循环的等价物,其中循环变量被赋值给枚举器对象的Current属性。 这绝对满足了该代码片段的任何符合C#编译器的明确赋值规则。 您使用的是不合格的编译器,或者错误来自其他地方。

这个: public Map(Function f)

应该:

 public Map(Function f) 

还有这个:

 public Collection Over(Collection xs) 

应该:

 public ICollection Over(ICollection xs) 

要么:

 public List Over(Collection xs)