2016-05-20 6 views
1

Grundsätzlich habe ich eine Reihe von Daten, die ich in Paare aufgeteilt habe. In diesem Fall string firstTicker und string secondTicker. Ich möchte einen Job in einer separaten Klasse ausführen, die die Instanzen von 'firstTicker' und 'secondTicker' verwendet. Gibt es eine Möglichkeit, diese Zeichenfolgen so zu deklarieren, dass auf sie außerhalb zugegriffen werden kann?Wie setzt man Variablen in einem Array (innerhalb einer foreach-Schleife), auf die in einer anderen Klasse zugegriffen werden soll?

static void Main(string[] args)  
{ 
    string _myPairList = GlobalVar.GlobalString; 

    //For reference: _myPairList="Joe,Brown;Bill,Lowry;Sara,Moncton" 

    string[] pairListArray = _myPairList.Split(';');  

    foreach (string tickerPair in pairListArray)   
    { 
     string[] tickerPairDualArray = tickerPair.Split(','); 

     // Command: I'd like to run a job in a seperate class with the two seperated 
     // tickers as variables for each set. (i.e. 'Joe' and 'Brown', 
     // 'Bill' and 'Lowry', 'Sara' and 'Moncton' are all run in the 
     // same program with the respective variables 

     string firstTicker = tickerPairDualArray[0]; 
     string secondTicker = tickerPairDualArray[1]; 
    }   

    Console.ReadLine(); 
} 
+0

Können Sie die Strings nicht in die Methode der anderen Klasse übergeben? – evanb

+0

Es sollte kein Problem dabei sein. Bitte geben Sie Ihren Klassencode an und wie Sie darauf zugreifen möchten. – kizeloo

+0

Versuchen Sie, Ihre Daten in eine andere Klasse zu übertragen, oder lässt Ihre andere Klasse diese Umfrage durchführen? In ersterem sollten Sie die Werte einfach weitergeben können. Im letzteren Fall können Sie Ihre TickerFields als Eigenschaften deklarieren, möglicherweise ein Ereignis hinzufügen, das Ihre Abfrageklasse abonniert, und es jedes Mal aufrufen, wenn die Schleife durchlaufen wird. – Travis

Antwort

1

Ja - in Ihrer anderen Klasse, die Sie geschrieben haben, haben Ihre Konstruktoren oder Methoden String-Parameter. Wenn Sie diese Zeichenfolgen in Ihrer Main-Methode verarbeiten möchten, rufen Sie einfach YourMethod(firstTicker, secondTicker); oder, wenn Sie sie zu den Daten einer Klasse hinzufügen möchten, MyClass obj = new MyClass(firstTicker, secondTicker);.

1

Wenn Sie einfach in eine andere Klasse mit der gewünschten Funktionalität wechseln möchten, dann sollte Jeremys Antwort gut sein.

Wenn Sie beliebigen Code aus einer anderen Klasse an die Schleife anhängen möchten, ist ein Ereignis ein effektiver Weg. Fügen Sie so etwas wie die folgenden, um Ihren Code:

public static event EventHandler<TickerEventArgs> TickerLoopIterated; 

private static void InvokeTickerLoopEvent(string firstTicker, string secondTicker) 
{ 
    if (null != TickerLoopIterated) 
    { 
     var args = new TickerEventArgs() { FirstTicker = firstTicker, SecondTicker = secondTicker }; 
     TickerLoopIterated(this, args); 
    } 
} 

public class TickerEventArgs : EventArgs 
{ 
    public string FirstTicker { get; set; } 
    public string SecondTicker { get; set; } 
} 

Und rufen Sie es in Ihrer Schleife, wenn Ihre Werte sind bereit

InvokeTickerLoopEvent(firstTicker, secondTicker); 

Dann in der anderen Klasse, auf das Ereignis abonnieren irgendwo im Code, wahrscheinlich in der Initialisierungsphase, etwa so:

NameOfTheClassWithYourTickerLoop.TickerLoopIterated += SomeCodeIWantToExecute; 

Und an anderer Stelle in dieser Klasse:

private void SomeCodeIWantToExecute(object sender, TickerEventArgs args) 
{ 
    //Your code here 
} 

Beachten Sie, dass das Ereignis statisch ist, da sich Ihr Beispiel in der öffentlichen static void main-Methode befindet. Werfen Sie diesen bösen Jungen in eine Objektklasse und Sie können ein Instanzenereignis verwenden.

Verwandte Themen