C# 将值从一种方法传递到另一种方法
C# passing values from one method to another
我在结果中收到错误代码。下面的代码。我基本上是想从 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);
您有一些选择:
- 有
SingleColumn
return results
并将其作为参数添加到 SMA
- 将
results
设为 class 的字段,以便共享。
选项 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];
...
}
请注意,我将您的 output/input 从 result
更改为 closePrice
,因为它只是将它转换为列表并返回。将其保留为 double[]
更简洁。您还可以通过使用 ToArray
而不是使用 ToList
和 then ToArray
.
稍微清理一下代码
你应该使用静态变量。
private static IEnumerable<double> result;
然后在方法 SingleColumn 中将 columnQuery.ToList() 赋给这个变量
C# 中的每个变量都存在于由花括号定义的范围内。在您的情况下,变量结果在 SingleCloumn 范围内。
public static void SingleColumn(IEnumerable<string> strs, int highNum)
{
}
要在另一个范围内使用结果,您可以将 "result" 作为全局变量。如我所见,您已注释掉
//static public double results;
首先取消注释并从
中删除 var
var results = columnQuery.ToList();
希望对您有所帮助。
我在结果中收到错误代码。下面的代码。我基本上是想从 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);
您有一些选择:
- 有
SingleColumn
returnresults
并将其作为参数添加到SMA
- 将
results
设为 class 的字段,以便共享。
选项 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];
...
}
请注意,我将您的 output/input 从 result
更改为 closePrice
,因为它只是将它转换为列表并返回。将其保留为 double[]
更简洁。您还可以通过使用 ToArray
而不是使用 ToList
和 then ToArray
.
你应该使用静态变量。
private static IEnumerable<double> result;
然后在方法 SingleColumn 中将 columnQuery.ToList() 赋给这个变量
C# 中的每个变量都存在于由花括号定义的范围内。在您的情况下,变量结果在 SingleCloumn 范围内。
public static void SingleColumn(IEnumerable<string> strs, int highNum)
{
}
要在另一个范围内使用结果,您可以将 "result" 作为全局变量。如我所见,您已注释掉
//static public double results;
首先取消注释并从
中删除 varvar results = columnQuery.ToList();
希望对您有所帮助。