2015-03-19 78 views
0

我想返回一个数组的Fibonacci序列数组使用我在c#中使用Visual Studio 2010编写的webservice。 这是我的函数来创建序列并将其存储在数组'Fibon'返回到客户端程序。从webservice返回一个数组到客户端控制台

public class Service1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public long[] Fibonacci(int length) 
    { 
     long[] Fibon; 
     Fibon = new long [length]; 
     Fibon[0] = 0; 
     Fibon[1] = 1; 

     for (int i = 2; i < length; i++) 
     { 
      Fibon[i] = Fibon[i - 2] + Fibon[i - 1]; 
     } 

     return Fibon; 
    } 
}` 

客户端程序中调用该函数如下:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Service1 webservice = new Service1(); 
     Console.Out.Write("\nHow many number of the Fibonacci sequence do you want returned?\n"); 
     int Number = Convert.ToInt32(Console.In.ReadLine()); 
     long[] Sequence = new long[Number]; 
     Sequence = webservice.Fibonacci(Number); // PROBLEM LINE ******** 
     Console.Out.Write("\nThe Sequence is \n\n"); 
     for (int i = 0; i <= Number; i++) 
     { 
      Console.WriteLine(Sequence[i]); 
     } 
     Console.Out.Write(", \n\nPress ENTER to return"); 
     Console.ReadLine(); 
    } 
} 

我收到错误“无法隐式‘诠释’转换为“长[]” 当我运行函数并在它正在工作的浏览器上测试它,但返回到客户端控制台却出现错误。我究竟做错了什么?

+0

您确定您的控制台应用程序调用了代码示例中显示的'Service1.Fibonacci()'方法吗?您的控制台应用程序是否指向正确的服务?如果你说是,你有没有证明这与调试? – 2015-03-19 01:11:24

回答

-1

应该没有错误在该行,应该只有问题的for循环:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Service1 webservice = new Service1(); 
     Console.Out.Write("\nHow many number of the Fibonacci sequence do you want returned?\n"); 
     var Number = Convert.ToInt32(Console.In.ReadLine());    
     var Sequence = webservice.Fibonacci(Number);  
     Console.Out.Write("\nThe Sequence is \n\n"); 
     for (int i = 0; i < Number; i++) // Fixed LINE ******** 
     { 
      Console.WriteLine(Sequence[i]); 
     } 
     Console.Out.Write(", \n\nPress ENTER to return"); 
     Console.ReadLine(); 
    } 
} 
+0

尽管循环错误和其他奇怪的编码元素,错误“不能隐式地将类型'int'转换为'long []”,您的解决方案并没有解决这个错误。它解决了索引超出范围的例外。 – 2015-03-19 01:13:35

+0

是的,我知道,但正如我所说,这条线没有错 – Peyman 2015-03-19 01:14:44

+0

我不得不改变索引问题和其他几行代码,如下面的答案所示。谢谢你们的建议。 – Donkeybags 2015-03-19 15:54:19

0

我按照你的建议Peyman的和解决方案工作。我也不得不改变线路从您的代码

var Number = Convert.ToInt32(Console.In.ReadLine());    
    var Sequence = webservice.Fibonacci(Number); 

现在的代码运行,并根据需要返回序列形成我的代码

int Number = Convert.ToInt32(Console.In.ReadLine());                         
    long[] Sequence = new long[Number]; 
    Sequence = webservice.Fibonacci(Number); 

所建议的线。非常感谢!!!!!