Java中List和Iterator的c#等价物是什么?

时间:2013-07-10 15:00:42

标签: c# java iterator

我手动将此Java代码转换为C#:

private static final List<BigInteger> PRIMES = Arrays.asList(new BigInteger[]
    { new BigInteger("10007"), new BigInteger("10009"),
      new BigInteger("10037"), new BigInteger("10039")});

Iterator<BigInteger> primes = PRIMES.iterator();

这是我在C#中的代码:

private static readonly List<BigInteger> PRIMES = new List<BigInteger> {
    10007, 10009,
    10037, 10039 };
IEnumerable<BigInteger> primes = PRIMES.AsEnumerable<BigInteger>();

但是,我不确定我的代码是否正确。我真的不了解C#中的list和iterator。

请任何人帮我正确转换代码,任何帮助都非常明确。

非常感谢。

3 个答案:

答案 0 :(得分:1)

您的代码是正确的。 List<T>是java ArrayList<T>的C#等价物,IEnumerable<T>或多或少等同于java Iterator<T>。公共API有点不同,但最终目标是相同的。

请注意,不需要AsEnumerable电话。由于List<T>实现IEnumerable<T>,您只需编写:

IEnumerable<BigInteger> primes = PRIMES;

也就是说,调用AsEnumerable并不是没有任何错误或代价高昂。

答案 1 :(得分:0)

您的代码似乎很好,但请注意c#中的List可以通过索引访问,因此根据您正在执行的操作,您可能不需要具有等效的迭代器。

答案 2 :(得分:0)

Java'List'是一个接口,因此.NET等效于'IList',而与Java的Iterator相当的.NET是'IEnumerator',而不是'IEnumerable':

private static readonly IList<System.Numerics.BigInteger> PRIMES = new System.Numerics.BigInteger[] { 10007, 10009, 10037, 10039 };

internal IEnumerator<System.Numerics.BigInteger> primes = PRIMES.GetEnumerator();