Использование KeyValuePair <> как Свойство против Отдельного Класса против чего-то еще - PullRequest
0 голосов
/ 20 февраля 2012

Как правильно отобразить «Таблицы администратора» в моих «Бизнес-объектах»? У меня есть следующее на моем объекте Address.

public class Address
{
    public int AddressID { get; set; }
    public KeyValuePair<short, string> County { get; set; }
    ...
}

Теперь, как мне создать экземпляр этого объекта в отношении свойств KeyValuePair<,>?

Мое предположение:

var myAddress = new Address { AddressID = 3, County = new KeyValuePair<short, string>(32, "La Crosse")}

EDIT

Это то, что я заменяю на KeyValuePair<> по рекомендации другого Программиста.

.....Address.cs..... 
public County County { get; set; }

.....County.cs.....
public class County
{
    public short? CountyID { get; set; }

    public string CountyName { get; set; }
}

Есть ли лучший путь между двумя или третьим путем, который еще лучше?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2012

KeyValuePair<T1, T2> в этом случае ничего не покупает.

Почему бы просто не быть явным?

public class Address
{
    public int AddressID { get; set; }
    public int CountyCode { get; set; }
    public string CountyName { get; set; }
}

или другой версией будет определение типа County с двумясвойства, а затем иметь свойство этого типа.

В коде ясность является королем.

3 голосов
/ 20 февраля 2012

Я только что запустил ваш код, и он работал как положено.

Свойство country имеет правильное значение Key = 32 и Value = La Crosse.


Ваш новый код безобразен.Я бы либо удалил установщик свойства Country, либо сделал бы класс Country неизменным.Этот тип двойной изменчивости - ошибка, ожидающая своего появления.

Делать класс Country неизменным, вероятно, правильное решение, поскольку отображение Id => Name исправлено.

Я бы использовал:

public class County
{
    public short? ID { get; private set; }
    public string Name { get; private set; }

    private Country(short? id,string name)
    {
      ID=id;
      Name=name;
    }
}
0 голосов
/ 20 февраля 2012

Создайте объект Country, чтобы было ясно, что должны представлять эта короткая строка и строка.

0 голосов
/ 20 февраля 2012

Lukazoid дает хороший совет, почему бы не сделать этого, на самом деле, шина, инициализация, которую вы показываете, будет работать хорошо. Вы могли бы доказать это довольно легко, используя свой отладчик. Что за вопрос?

...