【问题标题】:Cannot implicitly convert type 'ServiceReference1.StockData[] ' to Systems.Collections.Generic.List<StockData>无法将类型“ServiceReference1.StockData[]”隐式转换为 Systems.Collections.Generic.List<StockData>
【发布时间】:2013-03-22 05:20:37
【问题描述】:

我正在尝试使用 WCF 服务,该服务以 List&lt;StockData&gt; 的形式返回自定义列表。

这是来自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

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

【问题讨论】:

  • 你为什么要创建一个new List&lt;&gt;,只是为了给那个引用分配一个不同的结果?就做var list = myProxy....
  • @JonathonReinhart,这消除了错误,但我以后无法访问列表的元素!
  • 为什么不呢?什么不工作?
  • @JonathonReinhart:我已经放置了服务实现和代理的代码。代理现在抛出索引越界错误 Iservice.cs :gist.github.com/KodeSeeker/5219192 Aspx.cs: gist.github.com/KodeSeeker/5219195

标签: c# asp.net .net wcf


【解决方案1】:

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

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

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

编辑:

喜欢:

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

【讨论】:

  • 你到底是如何拉起这个屏幕的?从哪里可以访问它
  • 你是如何添加服务引用的??通常,在Visual Studio中右键单击项目下的服务引用,添加服务引用,在那里你会找到一个按钮Advanced,从那里你可以找到那个屏幕。您甚至可以点击您现有的服务参考并点击更新,看看您是否在那里找到了高级按钮。
  • @KodeSeeker,您也可以查看答案的编辑部分,您可以将数组转换为List
  • @Habib- 我尝试将数组转换为列表部分,但它会抛出错误消息 - Cannot implicilty convert type Systems.Collections.Generic.List&lt;ServiceReference1.StockData&gt; to Systems.Collections.Generic.List&lt;StockData&gt;
  • 还有当我点击更新时,它会再次自动下载服务信息,没有update选项。
【解决方案2】:

你应该使用IList&lt;StockData&gt;,因为StockData[]实现了这个接口,它应该可以让一切正常工作。

此外,您无需调用new List&lt;T&gt;(),因为您会立即用另一个值覆盖它。

【讨论】:

  • ` IList 列表; list=myProxy.orderStockData(txtinput1.Text, txtinput2.Text, txtinput3.Text);` 也不起作用
【解决方案3】:

如果您希望代理使用List&lt;T&gt;T[],您可以更改服务引用设置。

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

【讨论】:

    【解决方案4】:

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

    对我有用的是使用var,如下所示

    //List<StockData> list = new List<StockData>(); // no need of this
    
    var list=myProxy.orderStockData(txtinput1.Text, txtinput2.Text, txtinput3.Text).Tolist();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      相关资源
      最近更新 更多