【问题标题】:C# passing values from one method to anotherC# 将值从一种方法传递到另一种方法
【发布时间】:2015-02-12 14:06:49
【问题描述】:

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

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

【问题讨论】:

    标签: c# static-methods


    【解决方案1】:

    你有一些选择:

    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,因为它只是将其转换为 List 并返回。将其保留为double[] 会更简洁。您也可以通过使用 ToArray 而不是使用 ToListthen ToArray 来稍微清理一下代码。

    【讨论】:

    • 感谢您的帮助。似乎工作,我可以编译。这可能是一个愚蠢的问题,但我如何才能真正获得 SMA 代码呢?你能给我一个简单的例子吗?
    • 你是什么意思“到达”它们是静态方法,所以你用前面的类名来调用它们:{classname}.SMA()
    • @D Stanley 在尝试从 GetHigh 方法调用 SMA 时,我得到“方法 'SMA' 没有重载需要 0 个参数。我通过编写 SMA() 来调用它;
    • 我明白了 :) Program.SMA(SingleColumn(lines, high + 1));感谢所有帮助我解决他的问题的人!
    【解决方案2】:

    你应该使用静态变量。

    private static IEnumerable<double> result;
    

    然后在方法 SingleColumn 中将 columnQuery.ToList() 分配给这个变量

    【讨论】:

      【解决方案3】:

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

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

      要在另一个范围内使用结果,您可以将“结果”作为全局变量。如我所见,您已将其注释掉

      //static public double results; 
      

      首先取消注释并从

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-14
        • 2013-01-29
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多