代码之家  ›  专栏  ›  技术社区  ›  user366312

如何解决这个组合框项目设置问题?

  •  1
  • user366312  · 技术社区  · 15 年前

    此代码没有设置组合框的正确值。这是因为,它们来自不同的环境。

    此外, in my actual problem ,MyClass中的重载==In和重写equals()都不起作用。

    还有别的办法吗?

    如何解决这个问题?

    我的班级.cs

    public class MyClass
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public MyClass(int id, string name)
            {
                ID = id;
                Name = name;
            }
    
            public static List<MyClass> Get()
            {
                return new List<MyClass>
                {
                    new MyClass(2, "AAA"),
                    new MyClass(4, "BBB"),
                    new MyClass(5, "CCC"),
                    new MyClass(7, "DDD"),
                    new MyClass(10, "EEE")
                };
            }
        }
    

    组合框.cs

    public partial class ComboBoxForm : Form
        {
            public ComboBoxForm()
            {
                InitializeComponent();
            }
    
            private void Form1_Shown(object sender, EventArgs e)
            {
                LoadDataToComboBoxFromDatabase();
            }
    
            private void LoadDataToComboBoxFromDatabase()
            {
                comboBox1.Items.Clear();
    
                List<MyClass> list = MyClass.Get();
    
                foreach(MyClass mc in list)
                {
                    comboBox1.Items.Add(mc);
                }
    
                comboBox1.DisplayMember = "Name";
                comboBox1.ValueMember = "ID";
    
                comboBox1.SelectedIndex = 0;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int ID = 5;//This is what I have.
                comboBox1.SelectedItem = .............how?
            }
        }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Pieter van Ginkel    15 年前

    我相信你的平等比较可能是错误的。对于NHibernate,我使用以下 Equals() 方法:

    public static class EntityUtil
    {
        public static bool Equals(IEntity a, IEntity b)
        {
            // Transient entitys are never equal (unless they are ReferenceEquals)!
    
            return
                ReferenceEquals(a, b) || (
                    !((object)a == null || (object)b == null) &&
                    !(IsTransient(a) || IsTransient(b)) &&
                    NHibernateProxyHelper.GetClassWithoutInitializingProxy(a) == NHibernateProxyHelper.GetClassWithoutInitializingProxy(b) &&
                    a.Id.Equals(b.Id)
                );
        }
    
        public static bool IsTransient(IEntity entity)
        {
            return entity.Id == 0;
        }
    }
    

    我在单独的帮助程序类中定义了此方法,并在我的实体中使用它:

    public class Entity : IEquatable<Entity>, IEquatable<IEntity>
    {
        private int? _hashCode;
    
        public virtual int Id { get; protected set; }
    
        public override bool Equals(object obj)
        {
            return EntityUtil.Equals((IEntity)this, obj as IEntity);
        }
    
        public virtual bool Equals(Entity obj)
        {
            return EntityUtil.Equals((IEntity)this, (IEntity)obj);
        }
    
        public virtual bool Equals(IEntity obj)
        {
            return EntityUtil.Equals((IEntity)this, obj);
        }
    
        public static bool operator ==(Entity a, Entity b)
        {
            return EntityUtil.Equals((IEntity)a, (IEntity)b);
        }
    
        public static bool operator !=(Entity a, Entity b)
        {
            return !(a == b);
        }
    
        public override int GetHashCode()
        {
            // GetHashCode needs to return a stable value.
    
            if (!_hashCode.HasValue)
            {
                _hashCode =
                    NHibernateProxyHelper.GetClassWithoutInitializingProxy(this).GetHashCode() ^
                    ((IEntity)this).Id.GetHashCode();
            }
    
            return _hashCode.Value;
        }
    }
    

    这是与NHibernate平等合作的建议实施。也许这对你也有帮助。

    推荐文章