Wywołanie metody z argumentami z klasyA zwracającą 2 argumenty do klasyB

0

Nie wiem czy to te 12 godzin programowania mnie tak zmęczyła ,ale mam wrażenie ,że nie poradzę sobie z tym.
Co zrobić by metoda zwracała 2 argumenty do tego sam doszedłem

public KeyValuePair<string[],string[]> FindStations(int RegionID,int ItemID,int Ammount)
        {
            Webrequest = Webrequest2.Replace("34", ItemID.ToString());
            Webrequest = Webrequest2.Replace("10000054", RegionID.ToString());
            Webrequest = Webrequest2.Replace("999", Ammount.ToString());
            string[] HighestPrices;
            string[] StationNames;
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(Webrequest);
            myRequest.Method = "GET";
            WebResponse myResponse = myRequest.GetResponse();
            StreamReader sr = new StreamReader(myResponse.GetResponseStream(), System.Text.Encoding.UTF8);
            string result = sr.ReadToEnd();
            sr.Close();
            myResponse.Close();
            //IEnumerable<string> prices = (from price in XElement.Parse(result).Descendants("buy_orders").Descendants("order") select (string)price.Element("price")).ToArray();
            HighestPrices = (from price in XElement.Parse(result).Descendants("buy_orders").Descendants("order") select (string)price.Element("price")).ToArray();
            MessageBox.Show(HighestPrices.ToString());
            StationNames = (from station_name in XElement.Parse(result).Descendants("buy_orders").Descendants("order") select (string)station_name.Element("station_name")).ToArray();
            MessageBox.Show(StationNames.ToString());
            Webrequest2 = "http://api.eve-central.com/api/quicklook?typeid=34&regionlimit=10000054&setminQ=999";
            return new KeyValuePair<string[],string[]>(HighestPrices,StationNames);
        }
 

Podobno to powinno zadziałać.
Metoda ma zwrócić StationNames jako array bo stacji może być nie wiadomo ile i tyle samo HighestPrices niech też będzie w string array...
Tą metodę "FindStations" wywołuję w innej klasie w buttonie

 
private void SearchButton_Click(object sender, EventArgs e)
        {
            string RegionName = comboBox1.Text;
            string Ammount = AmmountTextBox.Text;
            int ArrayLenght = 0;
            for (int i = 0; i < RegionNames.Length; i++)
			{
                if (RegionNames[i] == RegionName)
                {
                    ArrayLenght = i;
                    break;
                }
			}
            UpdateStations.FindStations(RegionIDs[ArrayLenght], ItemListView.ItemNumber, Ammount);
            
        
        }

I szczerze nawet nie wiem jak wywołać taką metodę....."kompilator"( =D ) mi pokazuje ,że źle wywołuję...
I proszę jak tłumaczycie to jak głąbowi....

0

A jakie błędy dostajesz?
FindStations zwraca Ci obiekt w powietrze.

0

wiem ,chcę to umieścić w jakiejś zmiennej i tu pojawia się problem bo nie wiem jak. Metoda niby zwraca 2 argumenty do buttona a nie wiem jak napisać by zwracała do dwóch zmiennych...
Błędów skopiować nie skopiuje bo ich nie ma.

0

Metoda ma zwrócić StationNames jako array bo stacji może być nie wiadomo ile i tyle samo HighestPrices niech też będzie w string array...

To może zwracaj Dictionary

0

widzę ,że jest podobne do KeyValuePair.
ale nie o to chodzi.
Powiedzmy uruchomiłem metodę FindStations.
Co zrobić by wyniki umieścić w zmiennej?

string[] s1;
string[] s2;
s1 , s2 = UpdateStations.FindStations(RegionIDs[ArrayLenght], ItemListView.ItemNumber, Convert.ToInt32(Ammount));
 

????
nie wiem jak to napisać.

0
var keyValuePair = wywolanieJakiesMetody();
0

dziękuje....rozumiem ,że wtedy var określi tą zmienną jako typ KeyValue(ten sam co metoda zwraca) i do poszczególnych elementów odwoływać się KeyValue.Key i KeyValue.Value?

0

Tak. Mozesz tez napisac KeyValuePair<blabla, blabla>, ale polecam wszedzie gdzie sie da uzywac var.

0

Ogarnięte.

var List = UpdateStations.FindStations(RegionIDs[ArrayLenght], ItemListView.ItemNumber, Convert.ToInt32(Ammount));
            for (int i = 0; i < List.Key.Length; i++)
            {
                ListViewItem itemlist = new ListViewItem();
                itemlist.Text = List.Value[i];
                itemlist.SubItems.Add(List.Key[i].ToString());
                itemlist.SubItems.Add(RegionIDs[ArrayLenght].ToString());
                listView1.Items.Add(itemlist);

            }
 

Temat do zamknięcia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1