组合属性

本文关键字:属性 组合 | 更新日期: 2023-09-27 18:22:44

我在下面的FullName property上收到一个Index out bounds error。我有我的persondetails类和data类,其中我正在使用SqlDataReader尝试调用此属性。firstnamelastname值是使用存储过程返回的,然后我想创建一个属性来连接这两个值,并能够在我的存储过程中调用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

存储过程只是从我的表中返回lastnamefirstname,该表有两个单独的字段。我不想在这里进行串联,我想在我的属性中进行串联。

已编辑***工作代码

组合属性

由于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。

您实际上并没有在类构造函数中设置firstNamelastName字段,而是在构造函数和FullName属性中复制代码。你需要做的是:

public string FullName
    get { return this.lastName + "," + this.firstName;
}
public persondetails(string lastName, string firstName)
{
    this.firstName = firstName;
    this.lastName = lastName;
}

这将确保正确计算FullName属性值。