c#中与Java枚举类型等价的是什么?请参阅下面的代码

本文关键字:是什么 请参阅 代码 Java 中与 枚举 类型 | 更新日期: 2023-09-27 18:13:42

public Enumeration getLogEntries(String header)
{
    return log != null ? ((Vector)log.get(header)).elements() : null;
           //log is a hashtable
           //
}

这是我在c#中尝试过的,但它不完整:

public IEnumerator getLogEntries(string header)
{
    return log.Keys.GetEnumerator(); //Something is missing here!
    //log is Dictionary<string,List<string>>()
}

c#中与Java枚举类型等价的是什么?请参阅下面的代码

不返回IEnumerator,返回IEnumerable:

public IEnumerable<string> GetLogEntries(string header)
{
    return log != null && log.ContainsKey(header) ? log[header] : Enumerable.Empty<string>();
}

然后你遍历它:

foreach(string entries in GetLogEntries("someKey"))
{ 
  //do something
}

这也具有强类型的优点。

还存在IList<string>ICollection<string>。这取决于你想用你的数据做什么,如果你计划.Add到他们。

Enumerable静态类可以在System.Linq命名空间中找到,如果你以前从未听说过linq,那么linq查询表达式(c#编程指南)是一本很好的读物。对我来说,LINQ改变了我看待序列的方式。

IEnumerable(大致)相当于Java中的Iterable,类似地,IEnumerator相当于Iterator

下面是你的方法的一个等效的c#版本:

public IEnumerable<string> GetLogEntries(string header)
{
    if (log != null && log.ContainsKey(header))
    {
        return log[header];
    }
    return null;
}

顺便说一下,c#使用Pascal大小写作为方法名,而不是Java的驼峰大小写。