2012-03-05 96 views
0

有沒有辦法處理雙打列表,我可以用下面的代碼處理整數,但不知道如何處理雙精度數組。列表處理雙數陣列

{ 
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 2012-03-05 17:06:44

+0

Yup List 都很好。但是,當我嘗試從客戶端使用肥皂發送這個我只有一個選項CalculateSumOfList.ServiceReference1.ArrayOfInt沒有arrayofdoubles,所以我在我的代碼中提到的行我得到的錯誤 – 2012-03-05 17:08:34

+0

對不起人們我完全搞砸了這個問題,弄糊塗了我現在已經解決了這個問題,希望應該更有意義。 – 2012-03-05 17:42:00

回答

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

對不起,我真的搞砸了,我不得不重做它。 – 2012-03-05 17:39:20

+0

接收到http:// localhost:3048/Service1.asmx的HTTP響應時發生錯誤。這可能是由於服務端點綁定不使用HTTP協議。這也可能是由於HTTP請求上下文被服務器中止(可能是由於服務關閉)。查看服務器日誌獲取更多詳細信在這一行上:string result = client.CalculateSum(arrayOfInt); – 2012-03-05 18:02:56

+0

即使用這種方法:arrayOfInt.AddRange(listDouble.Select(d =>(int)d).ToList()); – 2012-03-05 18:03:10

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

錯誤如果我嘗試過,最好的重載方法匹配?在convertedDecimalList.AddRange(listDecimal);? – 2012-03-05 17:18:23

+1

arrayOfInt真的是一個int數組嗎?如果是這樣,那麼你將不得不使用arrayOfInt.ToList()。ConvertAll。如果不是,你的具體錯誤是什麼? – 2012-03-05 17:22:24

+0

對不起沒有雙打數組。 – 2012-03-05 17:34:07