如何避免为类名和属性名使用相同的标识符?

6 c# entity-framework properties class naming-conventions

以下是共享相同标识符的类和属性的一些示例:

public Coordinates Coordinates { get; set; }
public Country Country { get; set; }
public Article Article { get; set; }
public Color Color { get; set; }
public Address Address { get; set; }
public Category Category { get; set; }
Run Code Online (Sandbox Code Playgroud)

将POCO与实体框架一起使用时会更频繁地发生此问题,因为实体框架使用关系的属性名称.

那么该怎么办?使用非标准的类名?

public ClsCoordinates Coordinates { get; set; }
public ClsCountry Country { get; set; }
public ClsArticle Article { get; set; }
public ClsColor Color { get; set; }
public ClsAddress Address { get; set; }
public ClsCategory Category { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者使用更具描述性的属性名称?

public Coordinates GeographicCoordinates { get; set; }
public Country GeographicCountry { get; set; }
public Article WebArticle { get; set; }
public Color BackgroundColor { get; set; }
public Address HomeAddress { get; set; }
public Category ProductCategory { get; set; }
Run Code Online (Sandbox Code Playgroud)

不太理想,但我想可以忍受它.

还是刚刚与它生活?

你最好的做法是什么?

Jon*_*eet 6

这有时被称为"颜色"问题 - 我的建议只是与它一起生活.

C#语言规范专为此而设计,不是问题.从C#3规范的7.5.4.1节:

在EI表单的成员访问中,如果E是单个标识符,并且E作为简单名称(第7.5.2节)的含义是常量,字段,属性,局部变量或具有相同类型的参数作为类型名称(§3.8)的E的含义,则允许E的两种可能含义.EI的两个可能含义从不含糊,因为在两种情况下我都必须是E类的成员.换句话说,该规则只允许访问静态成员和嵌套类型的E,否则会发生编译时错误.

(后跟一个例子.)

显然,当你可以提供一个更具描述性的属性名,这是伟大的-但往往最好的名字还真一样的性质.

这发生在框架本身 - 例如,HttpWebRequest.CookieContainer类型CookieContainer,并且有各种类型的Evidence属性类型Evidence.