2013-07-10 70 views
0

我這個Java代碼手工轉換爲C#:什麼是Java中的List和Iterator的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#中的列表和迭代器。

任何人都可以幫助我正確地轉換代碼,任何援助是非常appericated。

非常感謝。

+4

代碼是否爲你有沒有以某種方式工作?它似乎是完全有效的C#代碼。 (儘管第二個變量不是必需的,因爲第一個變量也是'IEnumerable '。) – David

+0

是的,代碼不起作用。我已經刪除了AsEnumerable ();代碼,現在它正在工作。但是,C#中的IEnumerable與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

嗨Servy,謝謝你的幫助。 所以,代碼是:IEnumerable primes = PRIMES;與迭代器相同 primes = PRIMES.iterator(); ?我的意思是,從C#中的PRIMES列表製作迭代器的正確代碼是? – NoeL

+0

@NoeL好吧,如果你想成爲真正的技術人員,它將會是'PRIMES.GetEnumerator()'以獲得更加明確的1:1映射,但在C#中,你將主要使用'IEnumerable',這是可以創建一個迭代器,而不是像在java中一樣處理迭代器本身。所以你的片段不完全一樣,但這些都是用這兩種語言解決相同問題的適當方式。 – Servy

+0

我很抱歉問太多,但哪一個是最好的IEnumerable primes = PRIMES;或IEnumerator primes = PRIMES.GetEnumerator();相當於迭代器 primes = PRIMES.iterator();?如果你願意,請告訴我不同​​的人。謝謝。 – NoeL

0

你的代碼看起來不錯,但要注意C#中的List可以被索引訪問,所以根據你在做什麼,你可能不需要具有迭代器的等價物。

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(); 
相關問題