webmethod: невозможно преобразовать строку типа в int - PullRequest
0 голосов
/ 05 марта 2012

Привет с этим кодом, который я получаю: невозможно преобразовать строку типа int в 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 ]

5 голосов
/ 05 марта 2012

Сообщение об ошибке довольно ясно.Ваш метод CalculateSum() возвращает строку.В строке, где происходит ошибка, вы пытаетесь использовать строковый результат для установки значения типа int:

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

Option 1

Я предлагаюизменив CalculateSum() на следующее:

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

Примечание: Я не уверен, почему вы передаете List<int> веб-службе для суммирования.Если у вас List<int>, просто позвоните List<int>.Sum(), WS не требуется.

Опция 2

Поскольку вы вызываете .ToString() в int после полученияпочему бы просто не извлечь его как строку?

string result = client.CalculateSum(arrayOfInt);

public string CalculateSum(List<int> listInt)
{
    return listInt.Sum().ToString();
}
2 голосов
/ 05 марта 2012

У вас здесь много проблем.Во-первых, ваш метод CalculateSum возвращает строку, но вы пытаетесь сохранить ее в int.

int result = client.CalculateSum(arrayOfInt);

Итак, первое, что вам нужно сделать, это изменить CalculateSum, чтобы он возвращал int.В этот момент вы увидите, что CalculateSum возвращает ..... System.Int32[].Кроме того, основной ToString для intArray.Так что твоя логика тоже довольно ошибочна.Давайте исправим это.

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

Тогда вы, вероятно, обнаружите, что вам вообще не нужен метод, и можете просто сделать это следующим образом

int result = arrayOfInt.Sum();
2 голосов
/ 05 марта 2012

CalculateSum возвращает строку

public string CalculateSum(List<int> listInt)

, и вы присваиваете ее целочисленной переменной.

int result = ...

Я бы изменил CalculateSum, чтобы вернуть целое число.

1 голос
/ 05 марта 2012

Изменение

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

К

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

Но лучше изменить сигнатуру вашего метода, чтобы он возвращал int, потому что сумма - это число.

[WebMethod]
public int CalculateSum(List<int> listInt)
{
    return listInt.Sum();    
}
0 голосов
/ 05 марта 2012

Веб-метод CalculateSum не делает то, что предлагает его название - он не возвращает сумму списка целых чисел, а скорее имя типа, то есть "System.Int32 []". Предполагая, что вы действительно хотите получить сумму целых чисел, и вы можете изменить веб-метод, тогда я предлагаю следующее:

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

Вам не нужно менять абонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...