[英]Union two List in C#
我想聯合,合並一個包含兩個引用的列表,所以這是我的代碼,我如何定義一個為這個海豚做好准備的列表?
if (e.CommandName == "AddtoSelected")
{
List<DetalleCita> lstAux = new List<DetalleCita>();
foreach (GridViewRow row in this.dgvEstudios.Rows)
{
var GridData = GetValues(row);
var GridData2 = GetValues(row);
IList AftList2 = GridData2.Values.Where(r => r != null).ToList();
AftList2.Cast<DetalleCita>();
chkEstudio = dgvEstudios.Rows[index].FindControl("ChkAsignar") as CheckBox;
if (chkEstudio.Checked)
{
IList AftList = GridData.Values.Where(r => r != null).ToList();
lstAux.Add(
new DetalleCita
{
codigoclase = Convert.ToInt32(AftList[0]),
nombreestudio = AftList[1].ToString(),
precioestudio = Convert.ToDouble(AftList[2]),
horacita = dt,
codigoestudio = AftList[4].ToString()
});
}
index++;
//this line to merge
lstAux.ToList().AddRange(AftList2);
}
dgvEstudios.DataSource = lstAux;
dgvEstudios.DataBind();
}
這是在 rowcommand 事件中。
如果要將AftList2
所有條目添加到lstAux
您應該將AftList2
定義為 IEnumerable<> 元素類型為DetalleCita
( IEnumerable<DetalleCita>
足以用作List<DetalleCita>
上AddRange()
參數)。 例如像這樣:
var AftList2 = GridData2.Values.Where(r => r != null).Cast<DetalleCita>();
然后您可以將其所有元素添加到lstAux
:
lstAux.AddRange(AftList2);
澄清:
我認為您誤解了ToList()
擴展方法的作用。 它從IEnumerable<T>
創建新列表,其結果與它所應用的原始IEnumerable<T>
無關。
這就是為什么你只是沒有做任何有用的嘗試做list.ToList().AddRange(...)
- 你正在將列表復制到(另一個新創建的ToList()
)列表,更新它然后基本上扔掉它(因為你甚至沒有做類似list2 = var1.ToList()
事情,原來的var1
在那之后保持不變!!!如果你調用它,你很可能想保存ToList()
結果)。
此外,您通常不需要將一個列表轉換為另一個列表,當您需要列表( List<T>
)但具有IEnumerable<T>
(不可索引,您可能需要通過索引快速訪問時, ToList()
很有用,或惰性求值,但此時您需要計算所有結果——嘗試使用 LINQ to objects 查詢的結果時可能會出現這兩種情況,例如: IEnumerable<int> ints = from i in anotherInts where i > 20 select i;
--即使anotherInts
是List<int>
查詢ints
結果也不能ints
為List<int>
因為它不是列表而是IEnumerable<int>
。在這種情況下,您仍然可以使用ToList()
獲取列表: List<int> ints = (from i in anotherInts where i > 20 select i).ToList();
)。
更新:
如果您的意思是聯合語義(例如,對於 { 1, 2 } 和 { 1, 3 }聯合將類似於 { 1, 2, 3 },沒有來自兩個集合的相等元素的重復)考慮切換到HashSet<T>
(它很可能在您的情況下可用,因為您使用的是 C# 3.0,我想您有最近的 .NET 框架)或使用Union()
擴展方法而不是AddRange
(我認為這並不比第一個解決方案更好,請小心因為它更像ToList()
-- a.Union(b)
返回新集合並且不更新a
或b
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.