2013-03-25 61 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