使用键值对<>作为财产与单独的类或。别的

时间:2012-02-20 17:01:41

标签: c# object-initializers

在“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; }
}

在两种或三种方式之间有更好的方式甚至更好吗?

4 个答案:

答案 0 :(得分:3)

我刚刚运行了您的代码,它按预期工作。

country属性的值为Key = 32Value = 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应该代表什么。