2015-02-12 5 views
0

В результате получается код ошибки. код ниже. Я в основном пытаюсь получить набор данных от SingleColumn и использовать его в методе SMA. Но я получаю результаты, которые не существуют в текущем контексте.C# передача значений от одного метода другому

static public void SMA() 
{ 
    double[] closePrice = results.ToArray(); 

Ниже вы можете увидеть SingleColumn и часть SMA кода.

#region Single Column 
//static public double results; 
static public void SingleColumn(IEnumerable<string> strs, int highNum) 
{ 
    #region spilt data to columns 
    Console.WriteLine("Single Column Query:"); 
    var columnQuery = from line in strs 
         let elements = line.Split(',') 
         select Convert.ToDouble(elements[highNum]); 
    var results = columnQuery.ToList(); 
    double[] closePrice = results.ToArray(); 
    #endregion 

    #region max, min, avg 
    double average = results.Average(); 
    double max = results.Max(); 
    double min = results.Min(); 
    Console.WriteLine("High: {0}: Low: {1}: Average: {2:0.00}", max, min, average); 
    #endregion 
} 

    #region Strategy Code SMA 
static public void SMA() 
{ 
    double[] closePrice = results.ToArray(); 
    int TOTAL_PERIODS = closePrice.Length; 
    double[] output = new double[TOTAL_PERIODS]; 
    int begin; 
    int length; 

    for (int i = 0; i < closePrice.Length-TOTAL_PERIODS; i++) //had to change from -1 to -TOTAL_PERIODS 
    { 
     closePrice[i] = (double)i; 
    } 

    TicTacTec.TA.Library.Core.RetCode retCode = Core.Sma(0, closePrice.Length-1, closePrice, PERIODS_AVERAGE, out begin, out length, output); 

ответ

2

У вас есть несколько вариантов:

  1. имеет SingleColumnвозвращенияresults и добавить, что в качестве параметра SMA
  2. сделать results поле класса, так что общее.

Вариант 1. чист, так как она заставляет абонент позвонить SingleColumn первой (или придумать список по собственному желанию)

static public double[] SingleColumn(IEnumerable<string> strs, int highNum) 
    { 
     ... 
     return closePrice; 
    } 

     #region Strategy Code SMA 
    static public void SMA(double[] closePrice) 
    { 
     int TOTAL_PERIODS = closePrice.Length; 
     double[] output = new double[TOTAL_PERIODS]; 
     ... 
    } 

Обратите внимание, что я изменил свой выход/вход от result к closePrice так он просто конвертировал его в список и обратно. Это чище, просто оставить его как double[]. Вы также можете немного очистить код, просто используя ToArray вместо ToList и , затемToArray.

+0

Благодарим за помощь. Кажется, работает, и я могу скомпилировать. Это может быть глупый вопрос, но как я могу достичь кода SMA? можете ли вы предоставить мне быстрый пример. – user3463116

+0

Что значит «досягаемость» Это статические методы, поэтому вы вызываете их с именем класса впереди: '{classname} .SMA()'. –

+0

@ D Стэнли при попытке вызвать SMA из метода GetHigh, я получаю «Нет перегрузки для метода« SMA »принимает 0 аргументов. Я вызвал его, написав SMA(): – user3463116

0

Вы должны использовать статическую переменную.

private static IEnumerable<double> result; 

, а затем в методе SingleColumn Asign columnQuery.ToList() этой переменной

0

каждой переменной в C# это существует в пределах объема, который определен в фигурные скобки. В вашем случае результат переменной находится в пределах SingleCloumn.

public static void SingleColumn(IEnumerable<string> strs, int highNum) 
{ 

} 

Чтобы использовать результат в другой области действия, вы можете сделать «результат» как глобальную переменную. Как я могу видеть, как вы закомментированы

//static public double results; 

первого не-комментарий его и удалить вар из

var results = columnQuery.ToList(); 

Надеется, что это помогает.

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