在C#中向另一个列表添加一个列表

时间:2015-06-05 03:06:07

标签: c# foreach ilist

我正在尝试将一个列表添加到另一个列表中。所以我有这个主要的列表,我将要构建。我遍历记录并构建一个列表,并且每次循环时都希望这个列表到主列表。我想用C#做这个。 我正在使用以下代码。 Add()函数不起作用。我收到语法错误。

 IList<CgValDetail> cgValDetail = null;
            //Get cgValDetails for each control
            foreach (UiControlScreenMetaData tempUiControls in uiControls)
            {
                if (tempUiControls.CgValId == null)
                {
                    continue;
                }
                IList<CgValDetail> tempCgValDetail = Retrieval<CgValDetail>.Search(new { CgValId = tempUiControls.CgValId }).ToList();
                if (!tempCgValDetail.Any())
                {
                    _foundationService.LogBusinessError(null, new ParameterBuilder("CgValId", tempUiControls.CgValId), "Invalid_CgValId_found");
                    return false;
                }
                //Add tempCgValDetail List to main list which is cgValDetail
                cgValDetail.Add(tempCgValDetail);


            }

5 个答案:

答案 0 :(得分:1)

看看AddRange。

var firstList = new List<string>();
var secondList = new List<string>() { "a", "b" };

firstList.AddRange(secondList);

您提到您无法访问AddRange ...问题是您使用的是IList,它没有实现AddRange。请查看以下内容,了解有关原因的更多信息:Why doesn't IList support AddRange

我建议你切换到List。

答案 1 :(得分:0)

您的cgValDetail为空。这就是为什么当你添加(...)时,你会得到语法错误。

制作新的IList<CgValDetail>

IList<CgValDetail> cgValDetail = new List<CgValDetail>();

为什么不使用List<T>代替IList<T>

答案 2 :(得分:0)

你忘记了它。

只是一个简单的例子:

List<a> aList= new List<a>();
List<aList> List_aList = new List<aList>();
List_aList.add(new aList());

Here指向相同问题的链接。

答案 3 :(得分:0)

首先,您需要将cgValDetail实例化为新列表,而不是null。

然后你应该决定是否要将cgValDetail声明为IList而不是List。如果是,请尝试:

IList<CgValDetail> cgValDetail = new List<CgValDetail>();
//Get cgValDetails for each control
foreach (UiControlScreenMetaData tempUiControls in uiControls)
{
    if (tempUiControls.CgValId == null)
    {
        continue;
    }
    IList<CgValDetail> tempCgValDetail = Retrieval<CgValDetail>.Search(new { CgValId = tempUiControls.CgValId }).ToList();
    if (!tempCgValDetail.Any())
    {
        _foundationService.LogBusinessError(null, new ParameterBuilder("CgValId", tempUiControls.CgValId), "Invalid_CgValId_found");
        return false;
    }
    //Add tempCgValDetail List to main list which is cgValDetail
    ((List<CgValDetail>)cgValDetail).AddRange(tempCgValDetail);
}

但我想知道为什么不使用List而不是IList。

List<CgValDetail> cgValDetail = new List<CgValDetail>();
//Get cgValDetails for each control
foreach (UiControlScreenMetaData tempUiControls in uiControls)
{
    if (tempUiControls.CgValId == null)
    {
        continue;
    }
    List<CgValDetail> tempCgValDetail = Retrieval<CgValDetail>.Search(new { CgValId = tempUiControls.CgValId }).ToList();
    if (!tempCgValDetail.Any())
    {
        _foundationService.LogBusinessError(null, new ParameterBuilder("CgValId", tempUiControls.CgValId), "Invalid_CgValId_found");
        return false;
    }
    //Add tempCgValDetail List to main list which is cgValDetail
    cgValDetail.AddRange(tempCgValDetail);
}

答案 4 :(得分:0)

也许,你可以在Linq中使用“UNION”(如果你真的不关心性能或结果集不够大)。

cgValDetail.Add(tempCgValDetail);   

更改为

cgValDetail = cgValDetail.Union(tempCgValDetail.Select(a => a)).ToList();