-3

我的gymInfo类中有这段代码:

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;
    }
}

包含20gymsDataTable行名称,现在我制作了一个自定义类,代码如下:

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

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

有谁明白我做错了什么?

4

5 回答 5

2

您实际上还没有创建数组。你有一个gymArray对象,你只是反复更改它的 name 属性。

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

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; }
}

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

于 2015-08-28T19:36:03.150 回答
0

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

尝试这个

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;
    }
}
于 2015-08-28T19:43:43.433 回答
0
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;
}
于 2015-08-28T19:36:12.580 回答
0

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

循环只是为你做一些事情,比如:

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

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

于 2015-08-28T19:36:44.253 回答
0

我认为你应该实施为

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

并在循环中。

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

于 2015-08-28T19:39:34.040 回答