组合属性
本文关键字:属性 组合 | 更新日期: 2023-09-27 18:22:44
我在下面的FullName property
上收到一个Index out bounds error
。我有我的persondetails
类和data
类,其中我正在使用SqlDataReader
尝试调用此属性。firstname
和lastname
值是使用存储过程返回的,然后我想创建一个属性来连接这两个值,并能够在我的存储过程中调用FullName
。
persondetails
类
private string firstName;
private string lastName;
private string fullName;
public string FirstName
{
get { return firstName;}
set { set firstName = value;}
}
public string LastName
get { return lastName; }
set { set lastName = value; }
public string FullName
get { return lastName + "," + firstName;
}
public persondetails(string lastName, string firstName)
{
this.lastName = lastName;
this.firstName = firstName;
}
data
级
public List<Persondetails> getFullName()
{
// Do my sql connection stuff
List<Persondetails> persondetails = new List<Persondetails>();
Persondetails person;
try
{
// open connection
// specify "stored Procedure" (which returns firstname and lastname)
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
person = new Persondetails((
reader.GetString(reader.GetOrdinal("LASTNAME")));
reader.GetString(reader.GetOrdinal("FIRSTNAME")));
persondetails.Add(person);
}
reader.Close();
return persondetails;
}
// the rest of my method
存储过程只是从我的表中返回lastname
和firstname
,该表有两个单独的字段。我不想在这里进行串联,我想在我的属性中进行串联。
已编辑***工作代码
由于C#6.0中添加了类似的string
插值功能,我们可以将string
连接为以下
public string FullName => $"{firstName} {lastName}";
问题是没有从存储过程返回名为"FullName"的列。这就是你出错的原因。
如果存储过程返回FirstName和LastName,则需要将它们存储在相应的属性中。
我希望您有一个从数据库填充类的方法。。。里面有这样的东西。。。
FirstName = reader.GetString(reader.GetOrdinal("FirstName")));
LastName = reader.GetString(reader.GetOrdinal("LastName")));
这将在你的类中填充你的名字和姓氏。。。。那么您的FullName属性将起作用,因为它只是连接FirstName和LastName。
您实际上并没有在类构造函数中设置firstName
和lastName
字段,而是在构造函数和FullName
属性中复制代码。你需要做的是:
public string FullName
get { return this.lastName + "," + this.firstName;
}
public persondetails(string lastName, string firstName)
{
this.firstName = firstName;
this.lastName = lastName;
}
这将确保正确计算FullName
属性值。