在c#中添加一个列表到另一个列表

本文关键字:列表 一个 另一个 添加 | 更新日期: 2023-09-27 17:53:38

我正试图将一个列表添加到另一个列表。我有这个主列表要创建。我循环遍历记录并建立一个列表,并希望这个列表在每次循环时都是主列表。我正尝试在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);

            }

在c#中添加一个列表到另一个列表

看一下adrange

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

你提到你无法访问AddRange…问题是你使用的是一个IList,它没有实现adrange。查看以下内容了解更多原因:为什么不't IList支持AddRange

我建议你切换到列表

首先,您需要将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);
}

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

创建一个新的IList<CgValDetail>

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

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

你忘了加新了

只是一个简单的例子:

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

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

cgValDetail.Add(tempCgValDetail);   

改为

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