【问题标题】:Control in a List does not equate to the original controlList 中的控件不等同于原始控件
【发布时间】:2019-12-30 12:26:40
【问题描述】:

所以我创建了一个列表(panelList)并插入了 10 个面板控件(已在 aspx 设计页面上创建)。但是,当我尝试检查 panelList[0] 是否与Panel1(这是我在 panelList 中添加的第一个面板),我返回 FALSE...知道为什么吗?这是我的代码


 static List<Panel> panelList = new List<Panel>();
 protected void Page_Load(object sender, EventArgs e)
 {
 if (!IsPostBack) 
        {
            panelList.Add(Panel1);
            panelList.Add(Panel2);
            panelList.Add(Panel3);
            panelList.Add(Panel4);
            panelList.Add(Panel5);
            panelList.Add(Panel6);
            panelList.Add(Panel7);
            panelList.Add(Panel8);
            panelList.Add(Panel9);
            panelList.Add(Panel10);
         } 
  }  

   protected void AddQuestionButton_Click(object sender, EventArgs e)
      {    
       Debug.WriteLine(panelList[0].Equals(Panel1));
      // here i get returned false in the debug output
      }

【问题讨论】:

  • 在添加到列表和检查是否相等之间,您对 Panel1 做了什么?
  • Panel1 来自 aspx 布局:这意味着在回发后(单击 AddQuestionButton)控件从表单数据中恢复,并且与添加到静态列表中的对象不同。 Equals 行为可能以不同的方式实现不同的对象引用。
  • @GertjanBrouwer 不,我只经历了一个循环,使所有面板不可见..
  • 无论如何我可以让等式比较变为真@OlegBondarenko
  • @SandroRamirez 您可以比较 Id 属性,它们对于每个 aspx 控件都是唯一的。

标签: c# asp.net list


【解决方案1】:

你应该考虑How to compare 2 object in c#, 有一些方法可以实现这一点

  1. 实施IEquatable&lt;T&gt;
  2. 序列化两个对象,然后将它们作为字符串结果进行比较

顺便说一句,this 链接对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多