我正在尝试将一个列表添加到另一个列表中。所以我有这个主要的列表,我将要构建。我遍历记录并构建一个列表,并且每次循环时都希望这个列表到主列表。我想用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);
}
答案 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();