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

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

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

您可以在下面看到SingleColumn和部分SMA代码。

 #region Single Column //static public double results; static public void SingleColumn(IEnumerable 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); 

你有一些选择:

  1. SingleColumn 返回 results并将其作为参数添加到SMA
  2. 使results成为类的一个字段,以便共享。

选项1.更清晰,因为它强制呼叫者首先调用SingleColumn (或者自己提出一个列表)

  static public double[] SingleColumn(IEnumerable 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来稍微清理代码。

你应该使用静态变量。

 private static IEnumerable result; 

然后在方法SingleColumn中将columnQuery.ToList()设置为此变量

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

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

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

 //static public double results; 

首先取消注释并删除var

 var results = columnQuery.ToList(); 

希望这可以帮助。