Общий цикл foreach в C # - PullRequest
       12

Общий цикл foreach в C #

4 голосов
/ 30 марта 2010

Компилятор, учитывая следующий код, говорит мне «Использование неназначенной локальной переменной '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;
    }
}

Ответы [ 3 ]

7 голосов
/ 30 марта 2010

После исправления очевидных ошибок он прекрасно скомпилируется.

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;
    }
}
2 голосов
/ 30 марта 2010

Это: 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)
2 голосов
/ 30 марта 2010

Спецификация языка определяет оператор foreach как эквивалент цикла while, в котором переменная цикла присваивается свойству Current объекта-перечислителя. Это определенно удовлетворяет определенным правилам присваивания любого соответствующего компилятора C # для этого фрагмента кода. Либо вы используете несовместимый компилятор, либо ошибка возникла где-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...