C# 使用if条件时将两个列表数据添加到数组中

C# 使用if条件时将两个列表数据添加到数组中,c#,.net,C#,.net,我有两个列表,一个列表有一些记录(不知道rec的具体编号,但不超过13条记录),第二个列表只有空值。我在这两个列表中使用if条件。并希望将这两个列表添加到一个数组中。我正在使用以下代码: for (int i=0; i>12; i++) { List<string> excList = new List<string>(); //added column from table, which can varies excList.Add((st

我有两个列表,一个列表有一些记录(不知道rec的具体编号,但不超过13条记录),第二个列表只有空值。我在这两个列表中使用if条件。并希望将这两个列表添加到一个数组中。我正在使用以下代码:

for (int i=0; i>12; i++)
{
    List<string> excList = new List<string>();
    //added column from table, which can varies
    excList.Add((string)column.ColumnName);
    string[] excelList = new string[] {  };
    List<string> stack = Enumerable.Range(excList.Count, 13)
                .Select(z => string.Empty)
                .ToList<string>();
    if (excList.Count > i)
    {
        excelList =  excList.ToArray();
    }
    if (excList.Count <= i)
    {
         excelList = stack.ToArray();
    }
    eCol0 = excelList[0].ToString();
    //show first value, after adding two list in excelList
    response.Write(eCol0);
}
for(int i=0;i>12;i++)
{
List excList=新列表();
//添加了表中的列,这些列可能会有所不同
excList.Add((字符串)column.ColumnName);
字符串[]excelList=新字符串[]{};
列表堆栈=可枚举的.Range(excList.Count,13)
.Select(z=>string.Empty)
.ToList();
如果(excList.Count>i)
{
excelList=excList.ToArray();
}

如果(excList.Count那么您从不向字符串数组excelList中添加内容。您总是将其指定为新的

使用数组也不是添加值的最佳方法,因为您需要事先知道数组的大小

如果您真的希望数组最终同时具有这两个结果,则应执行以下操作:

        List<string> excList = new List<string>();

        ... fill your excList here and initialize the stack list with whatever you need ...

        excList.AddRange(stack);

        string[] excelList = excList.ToArray();
List excList=new List();
…在此处填写您的排他列表,并用您需要的任何内容初始化堆栈列表。。。
excList.AddRange(堆栈);
字符串[]excelList=excList.ToArray();
编辑:正如评论中提到的,你的问题有点令人困惑,你使用的是一个大循环,没有明确的原因,添加空值也没有意义……所以我试图从你想知道的内容中获得本质

编辑:2 等一下,我想您最终需要一个字符串数组,大小为13,其中元素至少为string.empty

            List<string> excList = new List<string>();
            //added column from table, which can varies
            excList.Add((string)column.ColumnName);

            string[] excelList = new string[13];

            for (int i = 0; i < excList.Count; i++)
            {
                excelList[i] = excList[i];
            }

            for (int i = excList.Count; i < 13; i++)
            {
                excelList[i] = string.Empty;
            }
List excList=new List();
//添加了表中的列,这些列可能会有所不同
excList.Add((字符串)column.ColumnName);
string[]excelList=新字符串[13];
for(int i=0;i

不需要外部循环

您已经编写了大量令人困惑的代码,这些代码可能会更加紧凑

通过这个命令,我能够理解您有一个N个字符串的列表,其中N可以在1到13之间,并且您希望将其转换为一个13个字符串的数组,其中所有列表项都在开头,空字符串在结尾

因此,请列出:

"a", "b", "c"
成为以下内容的数组:

"a", "b", "c", "", "", "", "", "", "", "", "", "", ""

如果希望一行程序从最多13个字符串的列表
x
生成13个字符串的列表:

string[] arrayOf13 = x.AddRange(Enumerable.Repeat("", 13 - x.Count)).ToArray();
如果您的列表
x
的未知数超过13:

string[] arrayOf13 = x.AddRange(Enumerable.Repeat("", 13)).Take(13).ToArray();
或者不使用LINQ,使用for或while循环:

for(; x.Count < 13; x.Add(""))
string[] arrayOf13 = x.ToArray();

while(x.Count < 13) 
  x.Add(""));
string[] arrayOf13 = x.ToArray();

似乎您的目标是获得一个包含13个字符串的数组(
excelList
),其中每个元素都是八个
字符串。默认情况下为空
,或者从某个源列表(
excList
)获取相应的(相同索引)元素

因此,一个简短的代码解决方案是首先创建一个13个元素的数组,用“string.Empty”初始化,然后复制源列表元素,限制为最多13个元素:

var excelList = Enumerable.Repeat(string.Empty, 13).ToArray();

excList.CopyTo(0, excelList, 0, Math.Min(13, excList.Count));

你是说其中一个列表是空的吗?你在循环中实例化了你的excel lisdt。因此,每次迭代都会创建并实例化一个新变量。在for循环之前创建并恢复excel列表。你的问题非常令人困惑。请澄清。(1)没有第二个循环。(2)您的预期结果不清楚。@CaiusJard是的。如果您希望将两个列表作为一个列表,并且您似乎可以使用LINQ,为什么不直接执行
a.Concat(b)
?实际上,我希望在一个数组中保存13条记录(名为excelList)。但是,如果列表只有4条记录,那么使用一个列表超过4条记录,则会出现索引外错误。因此,请在以上答案中提供任何更新。如果您没有再次清除,请自由提问。感谢您的回复,但它不起作用。@scoop您到底什么时候会出现索引外错误?此处:
eCol0=excelList[0]。ToString()
?那么您希望最终始终是一个固定大小为13的数组吗?编辑:看到了对slo的第二个答案,并对循环的第一个进行了一个更改:excelList[i]=excList[i]。
var excelList = Enumerable.Repeat(string.Empty, 13).ToArray();

excList.CopyTo(0, excelList, 0, Math.Min(13, excList.Count));