Как извлечь строковое представление ключевого объекта - PullRequest
1 голос
/ 22 августа 2011

Я храню элементы в строго типизированном IDictionary<TKey, TValue>, так что значение также представляет ключ:

public class MyObject
    {

        public string Name { get; private set; }
        public SectionId Section { get; private set; }

        public MyObject(SectionId section, string name)
        {
            Section = section;
            Name = name;
        }
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != typeof(MyObject)) return false;
            return Equals((MyObject)obj);
        }

        public override int GetHashCode()
        {
            unchecked
            {
                return (Name.ToLower().GetHashCode() * 397) ^ Section.GetHashCode();
            }
        }

    }

В моем уровне презентации мне нужно перебрать этот словарь, добавив каждый элемент в элемент управления ListBox. Мне трудно разобраться, как преобразовать MyObject (который также действует как ключ) в строку, которую элемент управления ListBox может использовать в качестве значения. Должен ли я просто сделать явный вызов MyObject.GetHashCode () следующим образом:

MyListBox.Add(new ListItem(myObject.Name, myObject.GetHashCode())

Ответы [ 2 ]

1 голос
/ 22 августа 2011

Я бы подумал о переопределении метода toString , и здесь вы в основном напишите код, который сгенерирует значимую строку для отображения в интерфейсе пользователя

Надеюсь, я правильно понял ваш вопрос.

0 голосов
/ 22 августа 2011

Должен ли я просто сделать явный вызов MyObject.GetHashCode ()

Нет, GetHashCode() is:

  1. Не гарантированно дать вамуникальное значение и
  2. Будет очень трудно перепроектировать для получения MyObject из.

Вместо этого каждый из ваших MyObject должен иметь своего родаключ уникального идентификатора.Это может быть значение enum или число, сгенерированное столбцом IDENTITY в вашей базе данных, или просто string, который уникальным образом идентифицирует каждый конкретный MyObject и из которого вы можете извлечь MyObject из любой коллекции или базы данных.вы используете в качестве хранилища.

Если когда-либо может быть только один MyObject с данными Name и Section, вы можете просто объединить их: SectionId + ":" + Name.Таким образом, вы можете разобрать эти два значения после факта.

...