【发布时间】:2013-06-14 09:22:52
【问题描述】:
我正在使用 C# 4.0。
我想从我的列表中删除一些元素。
我有一个列表 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);
}
}
没有错误,我只是没有删除元素。 我在 A 中有 345 个元素,在 B 中有 3 个元素。 A 中的 1 个元素匹配 B 中的 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...奇怪...
【问题讨论】:
-
你能定义
not work吗?调试器会抛出错误吗? -
我知道这不是问题,但您可能应该反转测试 Od_Scan == Od_Done.NoOrdre.ToString() && !String.IsNullOrWhiteSpace - 首先检查空或空格。
-
还有,您查看 Temp_XX_Egal 列表了吗?它们是否包含您所期望的内容?
-
是的,在 Temp_XX_Egal 列表中我有我所期望的