C# 如何将值返回到方法中?

C# 如何将值返回到方法中?,c#,C#,我不确定我用词是否正确。我有一个变量fib2,里面有另一个变量nearclose。nearclose来自公式处理的结果。在脚本末尾,nearclose返回一个数字,比如说10。它返回10,因为fibo2从变量Close.GetValueAtCurrentBar开始计算: fibo2 = (Close.GetValueAt(CurrentBar) - lowPrice0) / (Ncma - lowPrice0); 第一次计算完成后,我想用nearclose的结果10替换Close.GetVal

我不确定我用词是否正确。我有一个变量fib2,里面有另一个变量nearclose。nearclose来自公式处理的结果。在脚本末尾,nearclose返回一个数字,比如说10。它返回10,因为fibo2从变量Close.GetValueAtCurrentBar开始计算:

fibo2 = (Close.GetValueAt(CurrentBar) - lowPrice0) / (Ncma - lowPrice0);
第一次计算完成后,我想用nearclose的结果10替换Close.GetValueAtCurrentBar。我可以通过将Close.GetValueAtCurrentBar替换为10来手动执行此操作:

fibo2 = (10 - lowPrice0) / (Ncma - lowPrice0);
最后的nearclose返回一个新值11。因此,下一次11将替换10,以生成一个新值,该值将再次替换11。这样,我可以在处理每个条后创建一个包含所有值的列表

所以我决定用nearclose替换Close.GetValueAtCurrentBar:

fibo2 = (nearclose - lowPrice0) / (Ncma - lowPrice0);
问题在于创建某种内部循环并返回0或错误的值

编辑部分:

这是主要思想的一个小例子:

    double fibo2 = 0;
    double nearclose = 8;
    double lowPrice0 = 4;
    double Ncma = 5;
    double x = 10;  
        
        
        
        
        fibo2 = (nearclose - lowPrice0) / (Ncma - lowPrice0);
        
        
        nearclose = fibo2 * x;
        
        
            var numbers = new List<double> {};
            numbers.Add(nearclose);
            
            
        foreach (var item in numbers)
            {   
                
                Print(item);
            
            }
打印返回40,但如果将nearclose替换为40,它将返回360。在列表中,您将得到{8,40,360…} 您将在Fib2中返回nearclose自身生成的新值。 在我的代码中,不是这个示例nearclose=0;因为结果来自图表中条形图的for循环生成的公式。我希望这能帮助更多人

编辑部分2020-10-27

public void WhateverTheChartingNameIs()
                {
                    
                    var barCount = 3;    
                    var results = new List<double> { nearclose };
                    
                    for(int i = 0; i < barCount; i++)
                    {
                        var result = RunCalculation(results[i]); 
                        results.Add(result);

                        Print("Result"+result);
                    }
                }
                        

                        
    private double RunCalculation(double nearclose)
            {
                
                return (nearclose - lowPrice0) / (Ncma - lowPrice0);
            }                   
听起来您只是想运行一个计算,记录结果,然后在下一次计算中使用该结果作为给定执行量的变量。如果是这样,我认为你可以做到:

public IList<double> CalculateResults(double startNumber, int barCount)
{    
    var results = new List<double> { startNumber };
    
    for(int i = 0; i < barCount; i++)
    {
        var result = RunCalculation(results[i]);
        results.Add(result);
    }
    
    return results;
}

private double RunCalculation(double nearClose)
{
    var lowPrice0 = //whatever this is;
    var Ncma = //whatever this is;
    return (nearClose - lowPrice0) / (Ncma - lowPrice0);
}
更新

如果您的评论是指图表软件只打印结果,而不是返回结果列表,则将其作废,并按如下方式打印结果:

public void WhateverTheChartingNameIs()
{
    var nearClose = 8;
    var barCount = 3;    
    var results = new List<double> { nearClose };
    
    for(int i = 0; i < barCount; i++)
    {
        var result = RunCalculation(results[i]); //same as above. If you can't do this just stick the logic from this method inside the for loop.
        results.Add(result);

        Print(result);
    }
}

老实说,很难理解这个问题;显示的任何内容中都没有关于返回任何内容的内容,并且显示的代码不可运行,因此我们无法看到您看到的内容,也无法清楚您希望看到的内容。代码中显示的很多东西实际上没有声明,我们看不出它们是否是局部变量、字段等;我们也看不出您是否试图在多个方法之间跨越值。很多事情都是可能的,但是这里没有太多的东西来理解你想要做什么,提供指导。你能让它运行吗?FWIW,我希望在这里向有问题的参数添加ref是一个可能的修复方法,但是如果没有上下文,很难说这个应该运行多长时间?在您的示例中,您已将while循环中的该值固定为3次,但这3次是从何而来的?这是一个700行代码。-当问这样的问题时,诀窍不是多发——而是少发;显示相同问题但细节可能少很多的最低代码是什么?如果同样的问题不能在10-20行完全可运行的代码中显示,我会感到惊讶,例如:完全不相关的代码:本质上:我们可以删除的任何东西,因为它不需要显示实际问题:通常与问题无关,因此,我们应该删除它。我正在docs.micro中阅读关于ref的内容,以了解它。我将尝试创建一个示例。我不确定什么是令人不快的参数。谢谢你了解基本原理。我必须拿出一个样品,否则就没有意义了。事实上,只需要这个部分:fibo2=nearclose-lowPrice0/Ncma-lowPrice0;我使用一个图表软件,它有自己的类。这是不允许公开和私人的。我可以用什么替换公共IList CalculateResultsdouble startNumber、int barCount和private double?@Frankdot那么制图软件的类在做什么呢?是返回结果还是打印结果?首先,你看到我编辑的部分了吗?我昨天做了一些澄清。第二,谢谢你的帮助。绘图软件是Ninjatrader.com。它有两个类OnBarUpdate和OnRender。而且,我正在编写OnRender。这就是为什么我问是否有办法修改公共IList CalculateResultsdouble startNumber,int barCount部分?我是一个不会说英语的业余程序员,所以我经常使用错误的术语来表达我自己。好吧,在一个带有新指示器的小测试中,它通过删除public void WhateverTheChartingNameIs来工作,现在我必须修改返回部分以摆脱类RunCalculation,并将该部分包含在OnRender中。非常感谢。