繁体   English   中英

C#中的通用foreach循环

[英]Generic foreach loop in C#

给定以下代码,编译器告诉我“使用未分配的局部变量'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;
    }
}

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

这个: 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM