webmethod:无法将类型字符串隐式转换为int

时间:2012-03-05 13:18:32

标签: c# web-services soap

嗨,我得到这个代码:不能隐式地将类型字符串转换为int。

        CalculateSumOfList.ServiceReference1.Service1SoapClient client = new CalculateSumOfList.ServiceReference1.Service1SoapClient();
        CalculateSumOfList.ServiceReference1.ArrayOfInt arrayOfInt = new CalculateSumOfList.ServiceReference1.ArrayOfInt();
        arrayOfInt.AddRange(listInt);
        int result = client.CalculateSum(arrayOfInt); //error here!
        label1.Text = Convert.ToString(result);

我打电话的网络方法就在这里:

namespace CalculateWebServiceSum
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string CalculateSum(List<int> listInt)
        {
            int[] sum = listInt.ToArray();

            return sum.ToString();

        }
    }
}

5 个答案:

答案 0 :(得分:5)

错误信息非常清楚。您的方法CalculateSum()返回一个字符串。在发生错误的行上,您尝试使用字符串结果来设置int的值:

int result = client.CalculateSum(arrayOfInt);
^ type int   ^ returns string

选项1

我建议您将CalculateSum()更改为:

public int CalculateSum(List<int> listInt)
{
    return listInt.Sum();
}

注意:我不确定您为什么要将List<int>传递给要汇总的网络服务。如果您有List<int>,只需致电List<int>.Sum(),无需WS。

选项2

由于你在检索它之后在int上调用.ToString(),为什么不把它作为字符串检索呢?

string result = client.CalculateSum(arrayOfInt);

public string CalculateSum(List<int> listInt)
{
    return listInt.Sum().ToString();
}

答案 1 :(得分:2)

CalculateSum返回一个字符串

public string CalculateSum(List<int> listInt)

并且您将它分配给整数变量。

int result = ...

我会更改CalculateSum以返回整数。

答案 2 :(得分:2)

这里有很多问题。首先,您的CalculateSum方法返回一个字符串,但您尝试将其存储到int。

int result = client.CalculateSum(arrayOfInt);

首先,您需要更改CalculateSum以返回int。此时您将看到CalculateSum返回..... System.Int32[]。此外,intArray的基本ToString。所以你的逻辑也是有缺陷的。让我们解决这个问题。

public int CalculateSum(List<int> listInt)
{
  int sum = listInt.Sum();
  return sum.ToString();
}

然后你可能会发现你根本不需要这个方法,而且可以像这样做

int result = arrayOfInt.Sum();

答案 3 :(得分:1)

更改

int result = client.CalculateSum(arrayOfInt); //error here!

string result = client.CalculateSum(arrayOfInt); // no errors here!

但最好更改方法的签名以返回int,因为sum是一个数字。

[WebMethod]
public int CalculateSum(List<int> listInt)
{
    return listInt.Sum();    
}

答案 4 :(得分:0)

CalculateSum Web方法没有按照其名称建议 - 它不返回整数列表的总和,而是返回类型名称,即“System.Int32 []”。假设你真的想要整数的总和,并且你可以改变web方法,那么我建议如下:

    [WebMethod]
    public int CalculateSum(List<int> listInt)
    {
         return listInt.Sum();
    } 

您无需更改来电者。