2013-07-10 4 views
0

я вручную преобразовать этот Java код C#:Что такое C# эквивалент List и Iterator в Java?

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#.

Пожалуйста, помогите мне, пожалуйста, правильно преобразовать код, любая помощь очень полезна.

Большое спасибо.

+4

Является ли код, как у вас он не работает каким-то образом? Кажется, это абсолютно правильный код C#. (Хотя вторая переменная не нужна, потому что первая из них также является «IEnumerable ».) – David

+0

Да, код не работает. Я удалил AsEnumerable (); кода, и теперь он работает. Но, IEnumerable в C# то же самое с итератором итератора в Java? или, есть ли еще лучше? – NoeL

ответ

1

Ваш код верный. List<T> - эквивалент C# java ArrayList<T>, а IEnumerable<T> - это более или менее эквивалент java Iterator<T>. Открытый API немного отличается, но конечная цель такая же.

Обратите внимание, что нет необходимости в вызове AsEnumerable. Поскольку List<T> орудий IEnumerable<T> вы можете просто написать:

IEnumerable<BigInteger> primes = PRIMES; 

Это говорит, называя AsEnumerable это на самом деле не делать ничего плохого или дорогостоящую либо.

+0

Hi Servy, спасибо за вашу помощь. Итак, есть код: IEnumerable primes = PRIMES; то же самое с Iterator primes = PRIMES.iterator(); ? Я имею в виду, что правильный код, чтобы сделать итератор из списка PRIMES в C#? – NoeL

+0

@NoeL Ну, если вы хотите быть действительно техничным, это будет 'PRIMES.GetEnumerator()' для более явного сопоставления 1: 1, но в C# вы будете в основном работать с 'IEnumerable', что может создайте итератор, вместо того, чтобы иметь дело с самим итератором, как и в java. Таким образом, ваши фрагменты не совсем одинаковы, но каждый из них является правильным способом решения этой проблемы на любом языке. – Servy

+0

Прошу просить слишком много, но это лучший IEnumerable primes = PRIMES; или IEnumerator primes = PRIMES.GetEnumerator(); что эквивалентно Iterator primes = PRIMES.iterator() ;? Если хотите, скажите мне разные. Благодарю. – NoeL

0

Ваш код кажется прекрасным, но обратите внимание, что к списку в C# можно получить доступ по индексу, поэтому в зависимости от того, что вы делаете, вам может не понадобиться эквивалент итератора.

0

'Список' Java представляет собой интерфейс, поэтому .NET эквивалент 'IList' и .NET эквивалентно итератора Java является '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(); 
Смежные вопросы