C#将值从一个方法传递到另一个方法

时间:2015-02-12 14:06:50

标签: c# static-methods

我在结果中收到错误代码。代码如下。我基本上是尝试从SingleColumn方法获取数据集并在SMA方法中使用它。但是我得到的结果在目前的背景下并不存在。

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);

3 个答案:

答案 0 :(得分:2)

你有一些选择:

  1. SingleColumn 返回 results并将其作为参数添加到SMA
  2. 使results成为该类的一个字段,以便共享。
  3. 选项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,因为它只是将其转换为List并返回。将它保留为double[]只是更清洁。您也可以使用ToArray而不是ToList然后 ToArray来清理代码。

答案 1 :(得分:0)

你应该使用静态变量。

private static IEnumerable<double> result;

然后在方法SingleColumn中将columnQuery.ToList()指向此变量

答案 2 :(得分:0)

C#中的每个变量都存在于由花括号定义的范围内。在您的情况下,变量结果在SingleCloumn范围内。

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

}

要在另一个范围中使用结果,可以将“result”作为全局变量。我可以看到你已经注释掉了

//static public double results; 

首先取消评论并从

中删除var
var results = columnQuery.ToList();

希望这有帮助。