我想從列表中刪除一些元素。
我有一個列表A(類型字符串)和列表B(類型T)。
我要採取一切元素,在列表A,但不是在B名單 - >我把它保存在Temp_Od_Scan(它的工作原理)
和所有元素,在列表B,而不是在列表A - >我把它保存在Temp_Od_Donne(它不工作)
此代碼工作正常(採取一切元素,在列表A,但不在列表中的B):
bool Is_Egal = true;
foreach (string Od_Scan in Ordre_Scan)
{
foreach (Pers_Compare Od_Done in Outils.Get_Ordre_Donne())
{
if (Od_Scan == Od_Done.NoOrdre.ToString() && !String.IsNullOrWhiteSpace(Od_Done.NoOrdre))
{
Temp_Od_Scan_Egal.Add(Od_Scan);
}
else
{
Is_Egal = false;
}
}
}
Temp_Od_Scan = Ordre_Scan.Except(Temp_Od_Scan_Egal).ToList();
但是這個代碼不工作(所有的元素,在列表B但不在列表A中),它不會刪除該元素。
foreach (Pers_Compare Od_Done in Outils.Get_Ordre_Donne())
{
foreach (string Od_Scan in Ordre_Scan)
{
if (Od_Done.NoOrdre == Od_Scan)
{
Temp_Od_Donne_Egal.Add(Od_Done);
}
else
{
Is_Egal = false;
}
}
}
Temp_Od_Donne = Outils.Get_Ordre_Donne().Except(Temp_Od_Donne_Egal).ToList();
,然後我問我的朋友谷歌,並發現了另一個解決方案,它也工作:
Temp_Od_Donne = Outils.Get_Ordre_Donne();
foreach (Pers_Compare donneexist in Temp_Od_Donne_Egal) Temp_Od_Donne.Remove(donneexist);
或像這樣:
Temp_Od_Donne.RemoveAll(i => Temp_Od_Donne_Egal.Contains(i));
或像這樣:
var list1 = Outils.Get_Ordre_Donne().Where(o => Ordre_Scan.Any(s => s != o.NoOrdre));
我的課程是這樣的:
public class Pers_Compare
{
string _NoLV;
public string NoLV
{
get { return _NoLV; }
set { _NoLV = value; }
}
string _NoOrdre;
public string NoOrdre
{
get { return _NoOrdre; }
set { _NoOrdre = value; }
}
public int CompareTo(string other)
{
return this.NoOrdre.CompareTo(other);
}
}
有沒有錯誤,我只是不刪除元素。 我有一個345元件和B. 3元件在乙 A匹配1個元件 1元件所以列表Temp_Od_Donne返回2(正確) 但列表Temp_Od_Donne返回345(不正確的,則它應該返回344)
,但奇怪的是,這個循環:
Temp_Od_Donne = Outils.Get_Ordre_Donne();
foreach (Pers_Compare donneexist in Temp_Od_Donne_Egal)
{
Temp_Od_Donne.Remove(donneexist);
}
之前進入循環Temp_Od_Donne.count = 345和後進入循環Temp_Od_Donne.count = 345 ... ...怪
您能定義'不工作'嗎?調試器是否會引發錯誤? – DGibbs
我知道這不是問題,但是您應該反過來測試Od_Scan == Od_Done.NoOrdre.ToString()&&!String.IsNullOrWhiteSpace - 首先將空或空格檢查。 – Gordon
而且,您是否查看了Temp_XX_Egal列表?它們是否包含你期望的內容? – Gordon