自定义对象不存储所有名称

Custom object not storing all names

我的 gymInfo 中有此代码 class:

public class gymInfo
{
   public gymArray getAllGymsByStars()
   {
        gymDataTableAdapters.gymsTableAdapter gymsTableAdapter = new gymDataTableAdapters.gymsTableAdapter();
        DataTable gymsDataTable = gymsTableAdapter.getAllGymsByStars();
        gymArray gymArray = new gymArray();

        foreach(DataRow row in gymsDataTable.Rows)
        {
            gymArray.name = row["name"].ToString();        
        }
        return gymArray;
    }
}

gymsDataTable包含20行名字,现在我自定义了class,代码如下:

public class gymArray
{
  public string name { get; set; }
}

我希望 string name 填充 20 个名称(因为它们在数据表中有 20 行)但是当我在行 return gymArray 上调试时它只显示最后一行的名称而不是显示整个自定义名称数组。

有人明白我做错了什么吗?

您实际上还没有创建数组。您有一个 gymArray 对象,您只是重复更改其名称 属性。

此外,您在命名事物时没有遵循 C# conventions。您的代码应该更像这样:

public class GymInfo
{
   public List<Gym> GetAllGymsByStars()
   {
        gymDataTableAdapters.gymsTableAdapter gymsTableAdapter = new gymDataTableAdapters.gymsTableAdapter();
        DataTable gymsDataTable = gymsTableAdapter.getAllGymsByStars();    
        List<Gym> gyms = new List<Gym>();    
        foreach(DataRow row in gymsDataTable.Rows)
        {
            Gym gym = new Gym();
            gym.Name = row["name"].ToString();
            gyms.Add(gym);      
        }
        return gyms;
    }
}

public class Gym
{
     public string Name { get; set; }
}

我没有将单个对象命名为 "array",而是创建了一个 Gym 对象的通用列表,并从 GetAllGymsByStars 方法返回了它。

public class gymArray
{
  public List<string> names { get; set; }
}

public gymArray getAllGymsByStars()
{
  gymDataTableAdapters.gymsTableAdapter gymsTableAdapter = new gymDataTableAdapters.gymsTableAdapter();
  DataTable gymsDataTable = gymsTableAdapter.getAllGymsByStars();
  gymArray gymArray = new gymArray();
  gymArray.names = new List<string>();

  foreach(DataRow row in gymsDataTable.Rows)
  {
     gymArray.names.Add(row["name"].ToString());        
  }
  return gymArray;
}

我不知道您希望如何存储所有名称,因为您每次都在 foreach 循环中覆盖 name 属性

循环正在为您做类似的事情:

gymArray.name = "some name";
gymArray.name = "other name";

我猜,您完全清楚 name 的最后一个值将是 other name。您可以使用 + 运算符附加到最后一个值,这将导致一大串名称,或者将 name 属性 更改为某个集合并添加新名称。也许 string 不是你喜欢的类型。

我认为你应该实施

List<gymArray> gymArray = new List<gymArray>();

并在循环中。

gymArray.Add(new gymAray { name : row["name"].ToString() });

好吧,您正在一次又一次地设置同一个对象的 属性。

试试这个

public class gymInfo
{
   public gymArray[] getAllGymsByStars()
   {
       int count = 0;
        gymDataTableAdapters.gymsTableAdapter gymsTableAdapter = new gymDataTableAdapters.gymsTableAdapter();
        DataTable gymsDataTable = gymsTableAdapter.getAllGymsByStars();
        gymArray[] gymArray = new gymArray[gymsDataTable.Rows.Count];

        foreach(DataRow row in gymsDataTable.Rows)
        {
            gymArray[count] = new gymArray();
            gymArray[count].name = row["name"].ToString();
            count++;
        }
        return gymArray;
    }
}