Поддерживать уникальность свойств / значений свойств в классе - PullRequest
0 голосов
/ 18 ноября 2011

У меня есть следующие классы. Я хочу, чтобы значение BP было уникальным для всех элементов Admin_Fee_Prop. Я не знаю, какой тип коллекции свойства Admin_Fee_Prop следует использовать или как определить класс Admin_Fee, чтобы значение свойства BP оставалось уникальным для всего элемента Admin_Fee_Prop? Иногда мне также может понадобиться уникальность составных свойств.

Public Class BE
{
  public string Name {get;set:)
  public List<Admin_Fee> Admin_Fee_Prop {get;set:) 
}

public class Admin_Fee
    {
        public string BP_Name { get; set; }

        public int BP { get; set; }

        public int BP_Perc { get; set; }

}

Ответы [ 2 ]

1 голос
/ 18 ноября 2011

Определить свойство BP как Guid вместо int.Вызовите Guid.NewGuid () для генерации нового и уникального значения.

Если вы хотите создавать его экземпляр каждый раз при создании Admin_Fee_Prop, добавьте конструктор по умолчанию, который будет генерировать новое значение для BP.Кроме того, вы можете хранить Admin_Fee_Prop в Словаре, где Key будет Admin_Fee_Prop.BP, а значением будет объект типа Admin_Fee_Prop.

0 голосов
/ 18 ноября 2011

Используйте HashSet<Admin_Fee> и внедрите Equals и GetHashCode в Admin_Fee, чтобы два экземпляра Admin_Fee считались равными, если они имеют одинаковое значение BP:

public Class BE
{
    public string Name {get;set:)
    public HashSet<Admin_Fee> Admin_Fee_Prop {get;set:) 
}


public class Admin_Fee
{
    public string BP_Name { get; set; }
    public int BP { get; set; }
    public int BP_Perc { get; set; }

    public override bool Equals(object other)
    {
        if (!(other is Admin_Fee))
            return false;
        return this.BP == ((Admin_Fee)other).BP;
    }

    public override int GetHashCode()
    {
        return BP;
    }

}

Другой возможный подход - реализовать IEqualityComparer<Admin_Fee> и передать его в качестве параметра конструктору HashSet<Admin_Fee>.

Иногда мне также может понадобиться уникальность в сложных свойствах

В этом случае вам необходимо учесть все эти свойства в Equals и GetHashCode. Для примеров того, как генерировать хеш-код из нескольких свойств, посмотрите на этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...