3

我正在尝试使用 WCF 服务,该服务返回表单中的自定义列表List<StockData>

这是来自的方法签名IService.cs

 [OperationContract]
     List<StockData> orderStockData(string compName1, string compName2, string compName3);

但是当我尝试通过服务参考在我的网站中引用它时:

List<StockData> list = new List<StockData>();
list = myProxy.orderStockData(txtinput1.Text, txtinput2.Text, txtinput3.Text);

我收到以下错误:

无法将类型“ServiceReference1.StockData[]”隐式转换为 Systems.Collections.Generic.List

解决这个问题的任何帮助都会很棒。谢谢!

4

4 回答 4

18

当您添加对您的站点的引用时,然后在DataType==>下Collection Type指定System.Array, (这也是默认值),这就是您的代理返回给您一个数组而不是列表的原因。

在此处输入图像描述

添加对 Web 服务的引用时,转到高级并指定System.Collection.Generic.List,您将获得与合同中相同的返回类型。

但是,如果您不想这样做,您仍然可以使用 Array 并将其转换为 List 使用ToList

编辑:

像:

List<StockData> list = new List<StockData>();
list=(myProxy.orderStockData(txtinput1.Text, txtinput2.Text, txtinput3.Text)).ToList();
于 2013-03-22T05:23:17.323 回答
0

您应该使用IList<StockData>,因为StockData[]实现了这个接口,它应该使一切正常。

此外,您不需要调用new List<T>(),因为您会立即用另一个值覆盖它。

于 2013-03-22T05:25:35.467 回答
0

如果您希望代理使用List<T>或,您可以更改服务引用设置T[]

要更改设置,请在解决方案资源管理器中右键单击项目中的服务引用。挑选"Configure Service Reference"。在"Collection type"挑选System.Collections.Generic.List.

于 2013-03-22T06:02:47.787 回答
0

我正在查看这篇文章,之前我也遇到过类似的错误,但上述答案都没有解决这个问题。

我有用的是var如下所示

//List<StockData> list = new List<StockData>(); // no need of this

var list=myProxy.orderStockData(txtinput1.Text, txtinput2.Text, txtinput3.Text).Tolist();
于 2014-07-11T12:43:14.007 回答