2013-03-25 59 views
0

score#UPDATED#這可能聽起來很愚蠢,但我一直被困在這個問題上三天了! 我是C#的新手。在C#中使用Web服務-List

我想在C#中使用Web服務。我設法與下面的代碼行消耗在Java Web服務:

  List x = new ArrayList<Score>(); 

      x = topScores(); 

      System.out.println("x" + x.size()); 

      System.out.println("TOP SCORES:"); 
      for (Object o : x) { 
       Score s1 = (Score) o; 
       System.out.println(s1.getScore()); 

      } 

我需要顯示的分數的列表,但似乎無法推測出來的C#。這裏是我卡在C#中的地方:

  List<object[]> list = new List<score[]>(); 

我已經嘗試過聲明集合的不同變體的加載,但無法通過這個。我想我知道如何遍歷列表,但我無法過去宣佈它。這是我的錯誤信息:

Cannot implicitly convert type `System.Collections.Generic.List<score>' to `System.Collections.Generic.List<object>' 

如果我改變聲明:

List<score> list = new List<score>(); 
list = service.TopScores(); 

我得到同樣的錯誤,但這個時候,我得到一個消息說:

"Object[] TopScores()" 

是什麼C#相當於我的Java片段?我真的很感謝任何幫助或建議!感謝您的時間!

+3

嘗試'名單名單=新名單();' – 2013-03-25 21:46:03

+0

很明顯,在你爲什麼不能在兩者之間轉換的原因是'名單'是不是名單​​的'超類型'。即使在Java的泛型實現中也沒有,儘管Java會讓你用可怕的非類型安全的代碼來解決這個問題。 (關於這個問題,可能有很多很多的問題,並解釋了爲什麼是這種情況。)爲什麼你不能在聲明的兩邊使用相同的類型? – millimoose 2013-03-25 21:57:53

+0

嘿,夥計!謝謝您的幫助!不幸的是我仍然無法修復它。如果我將列表更改爲「列表 list = new List ();」然後嘗試調用webservice「list = service.TopScores();」..我得到相同的錯誤!現在我得到幫助信息,說「Object [] TopScores()」。 – 2013-03-25 22:35:51

回答

1

謝謝你的幫助......我想它了...

 LoginService service = new LoginService(); 
     List<score> listA = new List<score>(); 

     object[] array = listA.ToArray(); 
     array = service.TopScores(); 
0

看起來您不需要創建List<object>,因爲您的代碼始終知道列表中的元素類型爲Score。你可以這樣做,而不是

List<Score> list = new List<Score>(); // Not really necessary because you assign it a different value in the next line. 

list = topScores().Select(o => o.ToString()).ToList(); 

... 

System.Console.WriteLine("x{0}", list.Length); 

System.Console.WriteLine("TOP SCORES:"); 
foreach (var score in list) { 
    System.Console.WriteLine(score.GetScore()); 
} 

但是,如果你真的想創建一個List<string>一個List<object>做到這一點的最簡單的方法是這樣的:

List<string> stringList = ... 
List<object> objectList = stringList.ToList<object>(); 
+0

嘿,夥計!謝謝您的幫助!不幸的是我仍然無法修復它。如果我將列表更改爲「列表 list = new List ();」然後嘗試調用webservice「list = service.TopScores();」..我得到相同的錯誤!現在我得到幫助信息,說「Object [] TopScores()」。 – 2013-03-25 22:36:46

+0

@DavidDonnellan您可以使用Linq將'objects []'轉換爲'List '。看到我更新的答案。 – 2013-03-25 22:38:29

2

列表<>類是一類稱爲泛型的集合,它允許您創建一個強類型對象的數組。 。 List部分意味着一個數組,因此您不需要將該類型聲明爲一個數組。而不是List<object[]>,你應該只是做List<object>。您也無法更改列表的數據類型。如果你想創建一個Score的列表,你應該這樣做。

List<Score> scores = new List<Score>(); 

,那麼你可以填充分數列表像

Score newScore = new Score(); 
scores.Add(newScore); 

或任何

0

宣佈這個名單時,您需要有相同的類型。

List<score> list = new List<score>(); 

然後

foreach(Score score in list) 
    { 
    //do something 
    } 
+0

「你需要有相同的類型」不正確。你可以實例化一個List <>的子類。 'List list = new MyCustomList()'很好。 – 2013-03-25 21:52:47

+0

但是在這個例子中肯定使用對象和分數不起作用? – 2013-03-25 21:54:44

+0

當然可以。你的代碼工作,我只是想澄清措辭,以避免任何可能的混淆。 – 2013-03-25 21:56:46