2012-03-05 2 views
0

Есть ли способ обработать список двойников Я могу обрабатывать ints с помощью кода ниже, но не уверен, как обращаться с массивом парных.список для обработки массива удвоений

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

    } 

Это все неправильно, а мне нужно вместо ArrayOfInt иметь массив двойных чисел?

стороне клиента:

namespace CalculateSumOfList 
    { 
     public partial class Form1 : Form 
     { 

      List<Double> listDouble = new List<Double>(); 


      public Form1() 
      { 
       InitializeComponent(); 
      } 
      private void Form1_Load(object sender, EventArgs e) 
      { 

      } 
      private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
      { 

      } 

      private void button1_Click(object sender, EventArgs e) 
      { 

       listDouble.Add(Convert.ToDouble(textBox1.Text)); 

       textBox1.Clear(); 
       listBox1.Items.Clear(); 
       for (int i = 0; i < listDouble.Count; i++) 
       { 
        listBox1.Items.Add(listDouble[i]); 
       } 

       textBox1.Clear(); 
       listBox1.Items.Clear(); 
       for (int i = 0; i < listDouble.Count; i++) 
       { 
        listBox1.Items.Add(listDouble[i]); 
       } 
      } 

      private void button2_Click(object sender, EventArgs e) 
      { 
       CalculateSumOfList.ServiceReference1.Service1SoapClient client = new CalculateSumOfList.ServiceReference1.Service1SoapClient(); 
       CalculateSumOfList.ServiceReference1.ArrayOfInt arrayOfInt = new CalculateSumOfList.ServiceReference1.ArrayOfInt(); 
       arrayOfInt.AddRange(listDouble); // error here! 
string result = client.CalculateSum(arrayOfInt); 
label1.Text = Convert.ToString(result); 



      } 



     } 
    } 

Web Метод:

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<double> listDouble) 
     { 
      return listDouble.Sum().ToString(); 



     } 
    } 
} 
+0

'Список ' отлично. Это поможет, если вы включили точную ошибку/проблему, которая описывает, почему это (предположительно) не работает для вас. – qJake

+0

Yup List в порядке. Но когда я пытаюсь отправить это с помощью мыла с клиентом, у меня есть только один параметр CalculateSumOfList.ServiceReference1.ArrayOfInt нет массива чисел, поэтому в строке, указанной в моем коде, я получаю сообщение об ошибке –

+0

Извините, что я полностью перепутал этот вопрос и запутался Я сейчас задал вопрос и, надеюсь, должен сделать больше смысла. –

ответ

1

Я не ясно, что ваш вопрос, но:

Если arrayOfInt.AddRange(listOfDouble) не компиляции вы могли бы использовать Linq и сделать

arrayOfInt.AddRange(listOfDouble.Select(d => (int)d).ToList()); 

Метод client.CalculateSum ожидает параметр типа List<double>

1) Я хотел бы изменить, что, если это возможно, чтобы быть public string CalculateSum(IEnumerable<double> items), который является более гибким

2) Как и выше вы можете преобразовать список любого складного типа с использованием list.Select(n => (double)n).ToList() при условии, что (double)n является действительным литым.

+0

Извините, я действительно перепутал вопрос, и мне пришлось его переделать. –

+0

Ошибка при получении ответа HTTP на http: // localhost: 3048/Service1.asmx. Это может быть связано с привязкой конечной точки службы, не использующей протокол HTTP. Это также может быть связано с тем, что сервер HTTP-запроса прерывается, и, возможно, из-за отключения службы.Подробнее см. Журналы сервера. В этой строке: string result = client.CalculateSum (arrayOfInt); –

+0

Thats using this method: arrayOfInt.AddRange (listDouble.Select (d => (int) d) .ToList()); –

1

Если я правильно понял ваш вопрос правильно, вам нужно вызвать ConvertAll к типу десятичного, прежде чем вы можете добавить listOfDecimal.

var convertedDecimalList = arrayOfInt.ConvertAll<decimal> 
    (element => (decimal)element); 
convertedDecimalList.AddRange(listDecimal); 

ОБНОВЛЕНО:

CalculateSumOfList.ServiceReference1.Service1SoapClient client = 
    new CalculateSumOfList.ServiceReference1.Service1SoapClient(); 
CalculateSumOfList.ServiceReference1.ArrayOfInt arrayOfInt = 
    new CalculateSumOfList.ServiceReference1.ArrayOfInt(); 
var listOfIntAsDouble = arrayOfInt.ConvertAll(x=>Convert.ToDouble(x)); 
listOfIntAsDouble .AddRange(listDouble); 
string result = client.CalculateSum(listOfIntAsDouble); 
label1.Text = Convert.ToString(result); 
+0

Ошибка Самый лучший перегруженный метод, если я попробую? На convertDecimalList.AddRange (listDecimal) ;? –

+1

Действительно ли arrayOfInt массив ints? Если это так, тогда вам придется использовать arrayOfInt.ToList(). ConvertAll. Если нет, какова ваша конкретная ошибка? –

+0

Извините, нет парной. –

Смежные вопросы