Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择唯一的元素_C#_List - Fatal编程技术网

C# 选择唯一的元素

C# 选择唯一的元素,c#,list,C#,List,我有以下课程: public class Test { public string ColumnA { get; set; } public int ColumnB { get; set; } public int ColumnC { get; set; } } a下列清单: List<Test> testList = new List<Test>() { new Test() { ColumnA = "Element 1", Co

我有以下课程:

public class Test
{
     public string ColumnA { get; set; }
     public int ColumnB { get; set; }
     public int ColumnC { get; set; }
}
a下列清单:

List<Test> testList = new List<Test>()
{
    new Test() { ColumnA = "Element 1", ColumnB = 1, ColumnC = 3 },
    new Test() { ColumnA = "Element 2", ColumnB = 2, ColumnC = 2 },
    new Test() { ColumnA = "Element 3", ColumnB = 1, ColumnC = 3 },
    new Test() { ColumnA = "Element 4", ColumnB = 4, ColumnC = 4 },
    new Test() { ColumnA = "Element 5", ColumnB = 5, ColumnC = 5 },
    new Test() { ColumnA = "Element 6", ColumnB = 7, ColumnC = 0 },
    new Test() { ColumnA = "Element 7", ColumnB = 7, ColumnC = 0 }
};
List testList=newlist()
{
新测试(){ColumnA=“Element 1”,ColumnB=1,ColumnC=3},
新测试(){ColumnA=“Element 2”,ColumnB=2,ColumnC=2},
新测试(){ColumnA=“Element 3”,ColumnB=1,ColumnC=3},
新测试(){ColumnA=“Element 4”,ColumnB=4,ColumnC=4},
新测试(){ColumnA=“Element 5”,ColumnB=5,ColumnC=5},
新测试(){ColumnA=“Element 6”,ColumnB=7,ColumnC=0},
新测试(){ColumnA=“Element 7”,ColumnB=7,ColumnC=0}
};
因此,我只想选择唯一的元素(B列和C列与其他元素不同),即:“元素2”、“元素4”和“元素5”

Obs:我不想带不同的元素,重复的元素,我不想带,两者都带


如何才能做到这一点?

使用Linq选择没有重复项的元素:

Test[] noDupes = testList.Where(item => 
    !testList.Except(new[] { item }).Any(inner => inner.Equals(item))
).ToArray();  
(当然,这假设您已经在
测试上实现了
等于

那么lambda呢

    List<Test> answer = testList.Where(t => t.ColumnB == t.ColumnC).ToList();
List-answer=testList.Where(t=>t.ColumnB==t.ColumnC.ToList();
只需使用
ElementB
ElementC
属性进行分组,并从只有一个元素的组中获取元素(这意味着它们是唯一的)。

可以编写

    List<Test> data = testList.FindAll(test => test.ColumnB == test.ColumnC);
List data=testList.FindAll(test=>test.ColumnB==test.ColumnC);

方法
FindAll
由于是
列表的成员而得到优化。当我们使用distinct时,FindAll

只带来一个重复元素,对吗?例如,列表:1,1,2,3,4,5,5,6,如果我使用distinct,我会有另一个带有1,2,3,4,5,6的列表,Right?但是,在我的例子中,我的目标是只带2,3,4和6,因为1和5是重复的。明白吗?你的编辑毫无意义。它不会返回任何内容,因为在
Any
调用中,您总是会找到至少一个元素,这与您在
Where
迭代中实际比较的元素相同。@MarcinJuraszek是的,对。我刚刚在其中添加了一个
Except
当前项,这应该可以解决这个问题。仍然不是更好,因为
Except
需要
IEnumerable
,并且您试图将它仅用于一个元素。问题的目标不是使B列和C列相等的元素,目标是“只选择唯一的元素”(B列和C列与其他元素相比不一样)”而不是它本身。我不明白(B列和C列与其他元素相比不一样)”到底是什么意思
    List<Test> data = testList.FindAll(test => test.ColumnB == test.ColumnC);