当前位置:  开发笔记 > 编程语言 > 正文

List.Contains(item)具有通用的对象列表

如何解决《List.Contains(item)具有通用的对象列表》经验,为你挑选了4个好方法。

如果您有一个List,如果存在指定的属性或属性集,如何返回该项?

public class Testing
{
    public string value1 { get; set; }
    public string value2 { get; set; }
    public int value3 { get; set; }
}
public class TestingList
{
    public void TestingNewList()
    {
        var testList = new List
                           {
                               new Testing {value1 = "Value1 - 1", value2 = "Value2 - 1", value3 = 3},
                               new Testing {value1 = "Value1 - 2", value2 = "Value2 - 2", value3 = 2},
                               new Testing {value1 = "Value1 - 3", value2 = "Value2 - 3", value3 = 3},
                               new Testing {value1 = "Value1 - 4", value2 = "Value2 - 4", value3 = 4},
                               new Testing {value1 = "Value1 - 5", value2 = "Value2 - 5", value3 = 5},
                               new Testing {value1 = "Value1 - 6", value2 = "Value2 - 6", value3 = 6},
                               new Testing {value1 = "Value1 - 7", value2 = "Value2 - 7", value3 = 7}
                           };

        //use testList.Contains to see if value3 = 3
        //use testList.Contains to see if value3 = 2 and value1 = "Value1 - 2"


    }
}

Mark.. 26

你可以用

testList.Exists(x=>x.value3 == 3)


CubanX.. 23

如果您使用的是.NET 3.5或更高版本,LINQ就是这个问题的答案:

testList.Where(t => t.value3 == 3);
testList.Where(t => t.value3 == 2 && t.value1 == "Value1 - 2");

如果不使用.NET 3.5,那么你可以循环选择你想要的那些.



1> Mark..:

你可以用

testList.Exists(x=>x.value3 == 3)



2> CubanX..:

如果您使用的是.NET 3.5或更高版本,LINQ就是这个问题的答案:

testList.Where(t => t.value3 == 3);
testList.Where(t => t.value3 == 2 && t.value1 == "Value1 - 2");

如果不使用.NET 3.5,那么你可以循环选择你想要的那些.



3> Alfa..:

看看班级FindFindAll方法List.



4> bdukes..:

如果要使用类的相等实现,可以使用该Contains方法.根据您如何定义相等性(默认情况下它将是参考,这将不是任何帮助),您可以运行其中一个测试.您还可以为IEqualityComparer要执行的每个测试创建多个s.

或者,对于不依赖于类的相等性的测试,您可以使用该Exists方法并传入委托进行测试(或者Find如果您想要对匹配实例的引用).

例如,您可以在Testing类中定义相等,如下所示:

public class Testing: IEquatable
{
    // getters, setters, other code
    ...

    public bool Equals(Testing other)
    {
        return other != null && other.value3 == this.value3;
    }
}

然后,您将使用以下代码测试列表是否包含value3 == 3的项目:

Testing testValue = new Testing();
testValue.value3 = 3;
return testList.Contains(testValue);

要使用Exists,您可以执行以下操作(首先使用委托,第二个使用lambda):

return testList.Exists(delegate(testValue) { return testValue.value3 == 3 });

return testList.Exists(testValue => testValue.value3 == 2 && testValue.value1 == "Value1 - 2");

推荐阅读
郑谊099_448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有