C# 使用KeyValuePair<&燃气轮机;作为属性与独立类与其他东西

C# 使用KeyValuePair<&燃气轮机;作为属性与独立类与其他东西,c#,object-initializers,C#,Object Initializers,在我的“业务对象”中显示“管理表”的正确方式是什么?我的Address对象上有以下内容 public class Address { public int AddressID { get; set; } public KeyValuePair<short, string> County { get; set; } ... } 在这两种方法之间有更好的方法吗?或者第三种方法更好吗?我刚刚运行了您的代码,它按预期工作 country属性具有正确的值Key=32和

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

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

在这两种方法之间有更好的方法吗?或者第三种方法更好吗?

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

country
属性具有正确的值
Key
=
32
value
=
La Crosse


你的新代码很难看。我要么删除
Country
属性的setter,要么使
Country
类不可变。这种双重易变性,是一个等待发生的错误

使
Country
类不可变可能是正确的决定,因为
Id
=>
名称
映射是固定的

我会使用:

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

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

country
属性具有正确的值
Key
=
32
value
=
La Crosse


你的新代码很难看。我要么删除
Country
属性的setter,要么使
Country
类不可变。这种双重易变性,是一个等待发生的错误

使
Country
类不可变可能是正确的决定,因为
Id
=>
名称
映射是固定的

我会使用:

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

Lukazoid给出了一个很好的提示,为什么不这样做,事实上,您正在显示的初始化将很好地工作。使用调试器可以很容易地证明这一点。问题是什么?

Lukazoid给出了一个很好的提示,为什么不这样做,事实上,您正在显示的初始化将很好地工作。使用调试器可以很容易地证明这一点。问题是什么?

KeyValuePair
在这种情况下不会为您带来任何好处

为什么不直接说出来

public class Address
{
    public int AddressID { get; set; }
    public int CountyCode { get; set; }
    public string CountyName { get; set; }
}
或者另一个版本是,您使用两个属性定义一个类型
country
,然后使用该类型的属性

在代码中,清晰是最重要的。

KeyValuePair
在这种情况下不会为您带来任何好处

为什么不直接说出来

public class Address
{
    public int AddressID { get; set; }
    public int CountyCode { get; set; }
    public string CountyName { get; set; }
}
或者另一个版本是,您使用两个属性定义一个类型
country
,然后使用该类型的属性


在代码中,清晰是最重要的。

创建一个国家/地区对象,这样就可以清楚地知道这个短字符和字符串应该代表什么。

创建一个国家/地区对象,这样就可以清楚地知道这个短字符和字符串应该代表什么。

KVP的值是否来自数据库?是否可以将它们提取为枚举类型,这样您的幻数/字符就不会那么神奇了?我建议在这种情况下不要使用
KeyValuePair
;开发人员无法清楚地看到
实际上是什么(什么是
short
用于
?。创建您自己的类型,该类型具有适当的属性名称,以使您和同事的生活更轻松。我已删除了不相关的成员。如果您不同意,请还原。您的代码有效。那么您的问题是什么?@Lukazoid:请查看我的编辑,并让我知道这是否有更多帮助。)感知或者如果您的语句仍然有效。KVP的值是否来自数据库?是否可以将它们提取为枚举类型,这样您的神奇数字/字符就不会那么神奇了?我建议在这种情况下不要使用
KeyValuePair
;开发人员无法清楚地看到
键或
值是什么实际上是(什么是
short
用于
?。创建您自己的类型,该类型具有适当的属性名称,以使您和同事的生活更轻松。我已删除了不相关的成员。如果您不同意,请还原。您的代码有效。那么您的问题是什么?@Lukazoid:请查看我的编辑,并让我知道这是否有更多帮助。)感觉或者你的陈述是否仍然有效。那么,如果一个县的名称需要更改吗?这是一种很可能的可能性。当需要实际更新一个现有县时,创建一个新的县是不对的。我很想听听你对此的做法。大多数时候你都不知道不需要在运行时更改国家名称,只需在加载时更改一次。这不像国家总是更改名称。但即使您这样做,更改也应该只在国家类本身内部进行,而不应该通过刚刚使用国家的地方进行。例如,加载一个新的国家定义文件。然后如果
County
需要更改吗?这是一种很有可能的可能性。创建一个新的
County
,而实际上需要更新一个现有的County
,这是不对的。我很想听听您对此的做法。大多数情况下,您不需要在运行时更改国家名称,只需要在加载时更改一次。这不像国家总是在更改名称。但即使您这样做,更改也只能在国家类别本身内部进行,而不能通过刚刚使用国家的地方进行。例如,通过加载新的国家定义文件。