如何验证列表数组中的列名和计数?C#

如何验证列表数组中的列名和计数?C#,c#,arrays,list,C#,Arrays,List,我正试图在.NET2.0中解决这个问题,不幸的是,这是不可协商的 我正在读一个csv文件,其中包含的数据列“应该”与IdentA中经过一些修改的股票代码列表相对应。 csv文件将读取: A_MSFT,A_CSCO,_A_YHOO,B_MSFT,B_CSCO,B_YHOO,C_MSFT,C_CSCO,C_YHOO IdentA[0]="MSFT"<br> IdentA[1]="CSCO"<br> IdentA[2]="YHOO"<br> The Assets

我正试图在.NET2.0中解决这个问题,不幸的是,这是不可协商的

我正在读一个csv文件,其中包含的数据列“应该”与IdentA中经过一些修改的股票代码列表相对应。 csv文件将读取:

A_MSFT,A_CSCO,_A_YHOO,B_MSFT,B_CSCO,B_YHOO,C_MSFT,C_CSCO,C_YHOO

IdentA[0]="MSFT"<br>
IdentA[1]="CSCO"<br>
IdentA[2]="YHOO"<br>

The AssetsA array is populated with the csv data<br>
AssetsA[0]=0<br>
AssetsA[1]=1.1<br>
AssetsA[2]=0<br>
AssetsA[3]=2<br>
AssetsA[4]=3.2<br>
AssetsA[5]=12<br>
AssetsA[6]=54<br>
AssetsA[7]=13<br>
AssetsA[8]=0.2<br>
A_MSFT,A_CSCO,_A_YHOO,B_MSFT,B_CSCO,B_YHOO,C_MSFT,C_CSCO,C_YHOO
标识符[0]=“MSFT”
IdentA[1]=“CSCO”
IdentA[2]=“YHOO”
使用csv数据填充AssetsA阵列
资产负债表[0]=0
资产负债表[1]=1.1
资产负债表[2]=0
资产负债表[3]=2
资产负债表[4]=3.2
资产负债表[5]=12
资产负债表[6]=54
资产负债表[7]=13
资产负债表[8]=0.2
C_u列是可选的,但是如果它们存在,它们都需要存在。所有后缀必须与IdentA中的值匹配。csv文件中的值都需要是十进制的。 我以一组3为例,IdentA数组中可能有任意数量的ticker

完成第一部分很容易:

    for (int x = 0; x < IdentA.Count; x++)
    {
        decimal.TryParse(AssetsA[x + IdentA.Count], out currentelections);
    }
for(int x=0;x
这将得到A列的第一组值,但如何通过B和C?我不能做像ideta.Count*2这样简单的事情


编辑:Identita在读取csv的第一行时填充,AssetsA在随后的行上填充,直到EOF。最初的设计者总是假设B_u和C_u会一直存在,数据会“到位”。我们来看看重新设计它需要什么:(

使用2d数组遍历两个数组,如下所示

for(int i = 0; i <= twoDeeArr[0].Count-1; i++)
{
     for(int j = 0; j <= twoDeeArr.Count-1; j++)
     {
          decimal.TryParse((decimal)twoDeeArr[i][j], out currentElections);
     }
}

for(int i=0;如果我正确阅读您的问题,我可以建议您可能使用了错误的数据结构。我建议使用{string,ArrayList}的映射。在映射中,将每个ident列作为键读取,然后在填充资产时,它将是myMap[“a_MSFT”]。添加(值)。更干净的设计,将使您当前的问题更容易解决。我喜欢这个想法,但我正试图在现有代码的环境下工作,这些代码在95%的时间内都能正常工作。见鬼,在有人完全中断C_u数据,然后现有的ideta.Count*2测试中断之前,2年内都没有人知道这是一个问题。我可能只是想切掉菲力刀,把它掏出来,但如果我能避免的话,这不是我的第一选择。