在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);
}
看一下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();