Компилятор, учитывая следующий код, говорит мне «Использование неназначенной локальной переменной '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; } }
После исправления очевидных ошибок он прекрасно скомпилируется.
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; } }
Это: public Map(Function f)
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)
Спецификация языка определяет оператор foreach как эквивалент цикла while, в котором переменная цикла присваивается свойству Current объекта-перечислителя. Это определенно удовлетворяет определенным правилам присваивания любого соответствующего компилятора C # для этого фрагмента кода. Либо вы используете несовместимый компилятор, либо ошибка возникла где-то еще.
foreach
while
Current