c#通过对象进行每次迭代并保存浮点数组

c#通过对象进行每次迭代并保存浮点数组,c#,arrays,loops,C#,Arrays,Loops,我对c#编程非常陌生。我搜索了几个小时,但找不到解决方案,或者我不知道如何解决这个问题。我从数据集中反序列化了对象 . 我的对象具有特定的交易值,例如开盘价-高位-低位-收盘价。 我想遍历我的对象并在浮点数组中获得一些值。 数组应该如下所示:float[]rsi14={7520.57535.07530.5,…} 像这样: deserialziedObjectRsi[0].open + desirializedObjectRsi[1].open + ... to array. 这些值已经来自fl

我对c#编程非常陌生。我搜索了几个小时,但找不到解决方案,或者我不知道如何解决这个问题。我从数据集中反序列化了对象 . 我的对象具有特定的交易值,例如开盘价-高位-低位-收盘价。 我想遍历我的对象并在浮点数组中获得一些值。 数组应该如下所示:float[]rsi14={7520.57535.07530.5,…}

像这样:

deserialziedObjectRsi[0].open + desirializedObjectRsi[1].open + ... to array.
这些值已经来自float类型

我希望这是一个循环,所以我不必写50次或更多

以下是我尝试过的一些代码:

    var deserializedObjectRsi = 
        JsonConvert.DeserializeObject<List<HistoricPricesRsi>>(stochDataRSI);

       List<float> RsiClose = new List<float>();
            RsiClose.Add(deserializedObjectRsi[0].close);
            RsiClose.Add(deserializedObjectRsi[1].close);
            RsiClose.Add(deserializedObjectRsi[2].close);
            RsiClose.Add(deserializedObjectRsi[3].close);
            RsiClose.Add(deserializedObjectRsi[4].close);
            RsiClose.Add(deserializedObjectRsi[5].close);
            RsiClose.Add(deserializedObjectRsi[6].close);
            RsiClose.Add(deserializedObjectRsi[7].close);
            RsiClose.Add(deserializedObjectRsi[8].close);
            RsiClose.Add(deserializedObjectRsi[9].close);
            RsiClose.Add(deserializedObjectRsi[10].close);
            RsiClose.Add(deserializedObjectRsi[11].close);
            RsiClose.Add(deserializedObjectRsi[12].close);
            RsiClose.Add(deserializedObjectRsi[13].close);

            float[] arrRSI14 = RsiClose.ToArray();
var反序列化对象rsi=
反序列化对象(stochDataRSI);
List RsiClose=新列表();
RsiClose.Add(反序列化对象rsi[0].close);
RsiClose.Add(反序列化对象rsi[1].close);
RsiClose.Add(反序列化对象rsi[2].close);
RsiClose.Add(反序列化对象rsi[3].close);
RsiClose.Add(反序列化对象rsi[4].close);
RsiClose.Add(反序列化对象rsi[5].close);
RsiClose.Add(反序列化对象rsi[6].close);
RsiClose.Add(反序列化对象rsi[7].close);
RsiClose.Add(反序列化对象rsi[8].close);
RsiClose.Add(反序列化对象rsi[9].close);
RsiClose.Add(反序列化对象rsi[10].close);
RsiClose.Add(反序列化对象rsi[11].close);
RsiClose.Add(反序列化对象rsi[12].close);
RsiClose.Add(反序列化对象rsi[13].close);
float[]arrrs14=RsiClose.ToArray();
您可以使用以声明方式为自己处理数据。它将包含一个隐含的循环

var arrRSI14 = deserializedObjectRsi.Select(x => Convert.ToSingle(x.Close)).ToArray();
这样做的目的是,对于
反序列化对象rsi
中的每个值(表示为
x
,但可以使用任何有意义的名称),将其转换为单个值,并将结果放入数组中。
var
关键字使编译器知道类型是什么;如果你真的想写,你可以写
float[]

在C#中,
float
关键字是.NET Framework
Single
类型的别名(请参阅以获取更多信息),这就是为什么所示的.NET转换方法使用ToSingle而不是ToFloat


我想补充一点关于所使用的数据类型的注意事项:对于货币数据来说,单一或浮动通常是一个糟糕的选择,因为其精度很小,如果在计算中使用,会很快积累明显的错误。当数字在幕后不近似于二进制分数这一点很重要时,我建议使用Decimal类型,例如Decimal中的0.1是一个循环的二进制分数,不能用一个或两个整数精确表示


有关详细信息,请阅读:。

欢迎使用堆栈溢出。“deserialziedobject.open[0-13]to array”是什么意思?请尝试更详细地描述你的目标是什么。重复你自己并不是更多的细节。你需要换一种说法。发布一个(例如在dotnetfiddle上)带有输入和输出示例的帖子我认为你需要的是
var rsicose=deserializedObjectRsi.Select(x=>Convert.ToDecimal(x.Close)).ToList()。看起来您使用的是应该使用
decimal
类型的数据:我更新了我的问题,希望现在它更清晰一些。