0

在我的“业务对象”中显示“管理表”的正确方法是什么?我的地址对象上有以下内容。

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

4 回答 4

3

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

country属性具有正确的值Key=32Value= 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;
    }
}
于 2012-02-20T17:10:22.733 回答
3

KeyValuePair<T1, T2>在这种情况下不会给你买任何东西。

为什么不直接明确?

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

或者另一个版本是您定义County具有两个属性的类型,然后改为具有该类型的属性。

在代码中,清晰为王。

于 2012-02-20T17:12:39.150 回答
0

创建一个 Country 对象,以便清楚该短字符串应该代表什么。

于 2012-02-20T17:15:03.637 回答
0

Lukazoid 给出了一个很好的提示,为什么不这样做,实际上总线,您显示的初始化会很好地工作。您可以使用调试器轻松证明这一点。问题是什么?

于 2012-02-20T17:12:07.273 回答