编译器给出以下代码,告诉我“使用未分配的局部变量'x'。”有什么想法吗?
public delegate Y Function<X,Y>(X x);
public class Map<X,Y>
{
private Function<X,Y> F;
public Map(Function f)
{
F = f;
}
public Collection<Y> Over(Collection<X> xs){
List<Y> ys = new List<Y>();
foreach (X x in xs)
{
X x2 = x;//ys.Add(F(x));
}
return ys;
}
}
答案 0 :(得分:7)
在解决了明显的错误之后,我编译好了。
public delegate Y Function<X,Y>(X x);
public class Map<X,Y>
{
private Function<X,Y> F;
public Map(Function<X,Y> f)
{
F = f;
}
public ICollection<Y> Over(ICollection<X> xs){
List<Y> ys = new List<Y>();
foreach (X x in xs)
{
X x2 = x;//ys.Add(F(x));
}
return ys;
}
}
答案 1 :(得分:2)
语言规范将foreach
语句定义为while
循环的等效语句,其中循环变量被赋值给枚举器对象的Current
属性。这绝对满足了该代码片段的任何符合C#编译器的明确赋值规则。您使用的是不合格的编译器,或者错误来自其他地方。
答案 2 :(得分:2)
这:public Map(Function f)
应该是:
public Map(Function<X,Y> f)
而且:
public Collection<Y> Over(Collection<X> xs)
应该是:
public ICollection<Y> Over(ICollection<X> xs)
或者:
public List<Y> Over(Collection<X> xs)