zoukankan      html  css  js  c++  java
  • C#的List的Contains方法 list的Contains方法是根据其元素类型定义的Equals方法来判断是否重复的

    https://zhidao.baidu.com/question/681553612286124812.html

    如果有类A和类B都继承了类C,类A已经存入到集合中了,那么此时用该方法判断类B,是会返回true还是false?

    你的类和List如何定义的?
    我测试是返回false,定义如下:
    public class C { }
    public class A:C { }
    public class B:C { }
    private void button1_Click(object sender,EventArgs e)
    {
    A a=new A();
    B b=new B();
    C c=new C();
    List lst=new List();
    lst.Add(a);
    if(lst.Contains(b))
    MessageBox.Show("true!");
    else
    MessageBox.Show("false!");
    }
    结果:
    false!

    list的Contains方法是根据其元素类型定义的Equals方法来判断是否重复的。因为是实例方法,所以与继承几乎没关系。看示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
        class Program
        {
            static void Main(string[] args)
            {
                List<A> As = new List<A>()
                {
                    new A(1,2)
                };
                A a1 = new A(1, 22);
                Console.WriteLine(As.Contains(a1));//false
                A a2 = new A(11, 2);
                Console.WriteLine(As.Contains(a2));//false
     
                //你自己对比上下区别
     
                List<B> Bs = new List<B>()
                {
                    new B(1,2)
                };
                B b1 = new B(1, 22);
                Console.WriteLine(Bs.Contains(b1));//true
                B b2 = new B(11, 2);
                Console.WriteLine(Bs.Contains(b2));//true
     
                Console.ReadLine();
            }
        }
     
        class A
        {
            public int a;
            public int b;
     
            public A(int a, int b)
            {
                this.a = a;
                this.b = b;
            }
     
            public override bool Equals(object obj)
            {
                if (obj == null)
                    return false;
                if (obj.GetType() != typeof(A))
                    return false;
                A c = obj as A;
                return (this.a == c.a && this.b == c.b);
            }
        }
     
        class B
        {
            public int a;
            public int b;
     
            public B(int a, int b)
            {
                this.a = a;
                this.b = b;
            }
     
            public override bool Equals(object obj)
            {
                if (obj == null)
                    return false;
                if (obj.GetType() != typeof(B))
                    return false;
                B c = obj as B;
                return (this.a == c.a || this.b == c.b);
            }
        }
  • 相关阅读:
    Unity热更新06-XLua热补丁-05
    Unity热更新06-XLua热补丁-04
    Unity热更新06-XLua热补丁-03
    Unity热更新06-XLua热补丁-02
    Unity热更新06-XLua热补丁-01
    [SQLite][database disk image is malformed]数据库恢复
    VMware 安装MAC
    c#编写的服务中访问网络位置的共享文件夹
    Android Socket发送信息时闪退
    一个简单的Log类
  • 原文地址:https://www.cnblogs.com/sunny3158/p/14608399.html
Copyright © 2011-2022 走看看