已有56人关注
List用法
发表在C#图书答疑 2014-07-14
是否精华
版块置顶:
问题源自《c_#经典编程220例》->《第19章 c#语言新技术》->《实例210 检查序列中是否包含指定元素》。
实例中定义了一个类Person:
public class Person
    {
        public Person(int id, string name)
        {
            this.ID = id;
            this.Name = name;
        }
        public int ID { get; set; }//人员ID
        public string Name { get; set; }//人员名称
    }

然后窗体运行时调用该类:
        private void Frm_Main_Load(object sender, EventArgs e)
        {
            List<Person> People = new List<Person>();//创建人员列表
            for (int i = 1; i < 10; i++)
            {
                People.Add(new Person(i, "User0" + i.ToString()));
            }
            bool result = People.Contains(new Person(3, "User03"));//检查序列是否包含指定元素
            label1.Text = "数据源:People(包含9个元素,元素的ID值分别为1、2、3、......、9)";//数据源
            label2.Text = "查询表达式:Contains(new Person(3,\"User03\"))";//查询表达式/操作
            label3.Text = "查询结果:"+result.ToString();//查询结果
        }

按说明的意思应该是会返回一个TRUE,但实际上返回的是FALSE。

经测试发现:
            List<Person> Pe = new List<Person>();//创建人员列表
            Person p = new Person(3, "User03");
            Pe.Add(p);
            bool pr = Pe.Contains(p);//检查序列是否包含指定元素,此处=true
            Person p1 = new Person(3, "User03");
            bool re = Pe.Contains(p1);//检查序列是否包含指定元素,此处=false

求解释
分享到:
精彩评论 5
小科_mrkj
学分:43 LV2
2014-07-14
沙发
读者朋友:
    您好,应该加一句Pe.Add(p1);,Contains这个方法是确定是否包含这个对象,不是看值相不相等。
司徒灬不祗寂寞
学分:0 LV1
TA的每日心情
开心
2020-04-19 19:33:32
2014-07-14
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
读者朋友:
    您好,应该加一句Pe.Add(p1);,Contains这个方法是确定是否包含这个对象,不是看值相不相等。
[/FIELDSET]

回复:
Person p1 = new Person(3, "User03");
bool re = Pe.Contains(p1);//检查序列是否包含指定元素,此处=false
这里我使用的是对象啊,只不过不是原来那同一个对象

  引用书中一段原文:“编写SQL语句时,有时使用逻辑运算符in或exists检查某一数据表中是否包含指定数据,而本示例使用LINQ限定操作符实现同样的功能”

既然是查找,那么存储的数据肯定不是一个两个,查找时肯定是不会知道存储的到底有没有该对象了。
如果匹配的时候不是新建的对象(即使与原对象值相同),而必须是原来的那个对象,那么就说明你已经有了那么一个对象,那查找还有意义吗,设计这个示例的意义又在哪
小科_mrkj
学分:43 LV2
2014-07-15
地板
读者朋友:
     您好,这个Contains方法使用的时候,如果是查找的值类型数据,就是直接看有没有值;如果是引用类型,就是看有没有这个对象。
司徒灬不祗寂寞
学分:0 LV1
TA的每日心情
开心
2020-04-19 19:33:32
2014-07-15
4L
[FIELDSET][LEGEND]引自:3楼[/LEGEND]
读者朋友:
     您好,这个Contains方法使用的时候,如果是查找的值类型数据,就是直接看有没有值;如果是引用类型,就是看有没有这个对象。
[/FIELDSET]

回复:
  正如我前面所说,如果作为引用类型用,就得引用原对象,这样貌似在实际应用中就没有其存在的意义,作为值类型,倒是可以满足需求,本人小白,请您用代码举例如何作为值类型来应用
小科_mrkj
学分:43 LV2
2014-07-15
5L
[FIELDSET][LEGEND]引自:4楼[/LEGEND]
[FIELDSET][LEGEND]引自:3楼[/LEGEND]
读者朋友:
     您好,这个Contains方法使用的时候,如果是查找的值类型数据,就是直接看有没有值;如果是引用类型,就是看有没有这个对象。
[/FIELDSET]

回复:
  正如我前面所说,如果作为引用类型用,就得引用原对象,这样貌似在实际应用中就没有其存在的意义,作为值类型,倒是可以满足需求,本人小白,请您用代码举例如何作为值类型来应用
[/FIELDSET]

回复:比如把Person类换成int类型,然后向其中添加int整数值,再查找整数值。
  
首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照