显然,公共字段很少是一个好主意,并且不会对属性添加任何内容.
例如:
public class ClientGroupDetails
{
public DateTime Col2;
public String Col3;
public Int32 Col4;
public ClientGroupDetails(DateTime m_Col2, String m_Col3, Int32 m_Col4)
{
Col2 = m_Col2;
Col3 = m_Col3;
Col4 = m_Col4;
}
public ClientGroupDetails() { }
}
[WebMethod()]
public List<ClientGroupDetails> GetClientGroupDetails(string phrase)
{
var client_group_details = new List<ClientGroupDetails>();
using (connection = new SqlConnection(ConfigurationManager.AppSettings["connString"]))
{
using (command = new SqlCommand(@"select col2, col3, col4 from table1 where col1 = @strSearch", connection))
{
command.Parameters.Add("@strSearch", SqlDbType.VarChar, 255).Value = phrase;
connection.Open();
using (reader = command.ExecuteReader())
{
int Col2Index = reader.GetOrdinal("col2");
int Col3Index = reader.GetOrdinal("col3");
int Col4Index = reader.GetOrdinal("col4");
while (reader.Read())
{
client_group_details.Add(new ClientGroupDetails(
reader.IsDBNull(Col2Index) ? (Nullable<DateTime>)null : (Nullable<DateTime>)reader.GetDateTime(Col2Index),
reader.IsDBNull(Col3Index) ? null : reader.GetString(Col3Index),
reader.GetInt32(Col4Index)));
}
}
}
}
return client_group_details;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何将使用公共字段的代码转换为属性?
Ree*_*sey 11
最简单的方法就是:
public DateTime Col2 { get; set; }
public String Col3 { get; set; }
public Int32 Col4 { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将使它们成为自动实现的属性而不是字段.
请注意,我不同意你的说法"公共领域永远不是一个好主意" - 我同意它们很少是一个好主意,但是(很少)它们比公共财产更好用.有关社会公共领域的一些很好的论据可能是合适的,我建议你阅读波多黎各马里亚尼的"十问价值为基础的编程",这两个问题还有答案.他为公共领域提供了强有力的理由,特别是如果没有非法的价值观,并且您希望常见用例包含频繁的变异.
话虽如此,我认为,在您的具体情况下,转换为属性将是有益的.另外,我建议将其转换为具有有意义名称的属性(不是Col2
,但更像是Date
等等).
编辑以回应评论:
你的全班将成为:
public class ClientGroupDetails
{
public DateTime Col2 { get; set; }
public String Col3 { get; set; }
public Int32 Col4 { get; set; }
public ClientGroupDetails(DateTime m_Col2, String m_Col3, Int32 m_Col4)
{
Col2 = m_Col2;
Col3 = m_Col3;
Col4 = m_Col4;
}
public ClientGroupDetails() { }
}
Run Code Online (Sandbox Code Playgroud)
但是,我建议重新设计它以获得更好的名称,即:
public class ClientGroupDetails
{
// Not 100% sure what appropriate names should be here
public DateTime Date { get; set; }
public String Name { get; set; }
public Int32 Id { get; set; }
public ClientGroupDetails(DateTime date, String name, Int32 id)
{
this.Date = date;
this.Name = name;
this.Id = id;
}
// I also wouldn't include this unless you really need it...
// public ClientGroupDetails() { }
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您在创建此类之后不打算编辑值,则可以通过以下方式使它们成为公开可见的属性,但不能设置:
public DateTime Date { get; private set; }
public String Name { get; private set; }
public Int32 Id { get; private set; }
Run Code Online (Sandbox Code Playgroud)
这将允许您的类(即:构造函数)设置值,但是类外的任何内容都不允许更改它们.