在“Business Objects”中显示“管理表”的正确方法是什么?我的地址对象上有以下内容。
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")}
修改
这就是我用另一个程序员的建议替换KeyValuePair<>
。
.....Address.cs.....
public County County { get; set; }
.....County.cs.....
public class County
{
public short? CountyID { get; set; }
public string CountyName { get; set; }
}
在两种或三种方式之间有更好的方式甚至更好吗?
答案 0 :(得分:3)
我刚刚运行了您的代码,它按预期工作。
country
属性的值为Key
= 32
且Value
= La Crosse
。
你的新代码很难看。我要么删除Country
属性的setter,要么使Country
类不可变。这种双重可变性,是一个等待发生的错误。
使Country
类不可变,可能是正确的决定,因为Id
=&gt; 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;
}
}
答案 1 :(得分:3)
KeyValuePair<T1, T2>
无需购买任何东西。
为什么不明确?
public class Address
{
public int AddressID { get; set; }
public int CountyCode { get; set; }
public string CountyName { get; set; }
}
或其他版本是您使用这两个属性定义类型County
,然后改为使用该类型的属性。
在代码中,清晰度是王道。
答案 2 :(得分:0)
Lukazoid提供了一个很好的暗示,为什么不这样做,总线实际上,你展示的初始化将很好。使用调试器可以很容易地证明这一点。问题是什么?
答案 3 :(得分:0)
创建一个Country对象,以便清楚该short和string应该代表什么。