什么是java Vector.element()C#等价物

Xri*_*ris 3 c# java

这是我未完全尝试翻译的java代码

    static Enumeration enumerate()
    {
    Vector list = new Vector();
    Enumeration e = cache.keys();
    while (e.hasMoreElements())
    {
         Vector v = (Vector) cache.get(e.nextElement());
         for (int i = 0; i < v.size(); i++)
         {
         list.addElement(v.elementAt(i));
         }
    }
   return list.elements();
     }
Run Code Online (Sandbox Code Playgroud)

这是C#翻译但不完整

    public static IEnumerable<Http> enumurate()
    {
        List<Http> list = new List<Http>();
        IEnumerator e = cache.Keys.GetEnumerator();
        while (e.MoveNext())/*While e has more element*/
        {
            var vector = (List<Http>)cache[e.Current];
            for (int i = 0; i < vector.Count; i++)
            {
                list.Add(vector.ElementAt<Http>(i));
            }
        }
        return //Something missing!!
    }
Run Code Online (Sandbox Code Playgroud)

请帮忙!

Dam*_*Arh 8

在C#List<Http>实现中IEnumerable<Http>,您只需返回列表:

return list;
Run Code Online (Sandbox Code Playgroud)

要将代码转换为C#,您可以跳过向列表中添加元素并直接生成结果:

public static IEnumerable<Http> enumerate()
{
    IEnumerator e = cache.Keys.GetEnumerator();
    while (e.MoveNext())/*While e has more element*/
    {
        var vector = (List<Http>)cache[e.Current];
        for (int i = 0; i < vector.Count; i++)
        {
            yield return vector.ElementAt<Http>(i);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,您可以避免直接使用枚举器并使代码更具可读性:

public static IEnumerable<Http> enumerate()
{
    foreach (var key in cache.Keys)
    {
        foreach (var http in (List<Http>)cache[key])
        {
            yield return http;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)