C# c关于什么类型的数组和用法的混淆

C# c关于什么类型的数组和用法的混淆,c#,arrays,multidimensional-array,foreach,C#,Arrays,Multidimensional Array,Foreach,我是c语言的新手,正在尝试构建一个项目数组。我看过2d数组和锯齿状数组,但根本无法计算出我应该使用什么,也无法让它工作。与其说是构建数组,不如说是循环遍历数组来查询数组元素。我在一个现有的库中工作,这个库是所有变量的来源,我遗漏了大多数其他支持代码,因为它们不相关。找到实例后,我将尝试将字段从0更新为1。非常感谢您事先提供的帮助 //Declare array private double[,] myOpenTrades; private void mymethod (double scor

我是c语言的新手,正在尝试构建一个项目数组。我看过2d数组和锯齿状数组,但根本无法计算出我应该使用什么,也无法让它工作。与其说是构建数组,不如说是循环遍历数组来查询数组元素。我在一个现有的库中工作,这个库是所有变量的来源,我遗漏了大多数其他支持代码,因为它们不相关。找到实例后,我将尝试将字段从0更新为1。非常感谢您事先提供的帮助

//Declare array
private double[,] myOpenTrades;

private void mymethod  (double score, double RSIComboScore, int type, int line)
{

myOpenTrades[line,0] = type;
myOpenTrades[line,1] = CurrentBar;
myOpenTrades[line,2] = Close[0];
myOpenTrades[line,3] = rewardClose;
myOpenTrades[line,4] = riskClose;
myOpenTrades[line,5] = score;
myOpenTrades[line,6] = RSIComboScore;
myOpenTrades[line,7] = this.getSMATrend();
myOpenTrades[line,8] = Math.Round(NSRSICS(5, 15, 60, 240).Rsi200AVGPlot[0]);
myOpenTrades[line,9] = myReward;
myOpenTrades[line,10] = myRisk;
myOpenTrades[line,11] = 0;
}


我不知道为什么这会被否决,这似乎是一个新用户提出的合理问题,他做了一些努力

要回答您的问题,数组不是最佳选择,因为从逻辑组织的角度来看,您没有网格,即相同项的2D数组,您有多个项作为一个记录,以及一个记录数组。更不用说,你似乎试图混合和匹配类型;数组声明为double,但第一个记录类型为整数

我建议使用以下类:

class OpenTrades
{
    public int Type;
    public Bar CurrentBar;
    public double Score;
    // etc...
}
这是假设CurrentBar的类型为Bar;你必须用那种类型的东西来代替酒吧

然后您将实例化类的数组,如下所示:

OpenTrades[] myOpenTrades = new OpenTrades[11];    // This will create an array of 11 elements, indices 0 to 10
现在,在mymethod函数中,您可以为每个成员分配值

myOpenTrades[line].Type = type;
myOpenTrades[line].Bar = CurrentBar;
myOpenTrades[line].Score = score;
// etc ... 

应该补充的是,我来自php背景,我认为这会引起一些问题。非常感谢你的回复,是的,在谈到这里之前,我做了一次很好的尝试。我现在唯一的困惑是如何把东西拿出来玩。您所做的似乎有效,没有错误,但当我尝试访问它时,我得到一个错误MyOpenRades在当前上下文中不存在,我想知道列表是否是更好的选择。该错误与您是否使用数组或列表无关。数组是指具有已知大小的集合,列表是指具有可在运行时动态更改大小的集合。错误消息是因为您试图访问范围外的MyOpenRades。编辑您的原始帖子并添加您现在拥有的代码。非常感谢您的回复。它帮助我了解到我需要使用的事实列表,并且现在已经成功实现。
myOpenTrades[line].Type = type;
myOpenTrades[line].Bar = CurrentBar;
myOpenTrades[line].Score = score;
// etc ...