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

时间:2015-08-28 19:28:27

标签: c# asp.net arrays custom-object

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

gymsDataTable包含20行名称,现在我已经创建了一个自定义类,这里是代码:

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

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

有谁理解我做错了什么?

5 个答案:

答案 0 :(得分:2)

您还没有真正创建过数组。你有一个对象,而你只是重复更改其名称属性。

此外,在命名时你并没有关注C# conventions。你的代码应该更像这样:

gymArray

我没有将单个对象命名为“数组”,而是创建了一个通用的Gym对象列表,并从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; } } 方法返回了该对象。

答案 1 :(得分:0)

 mvn -P bluemix cf:services                                                                        
    [INFO] ------------------------------------------------------------------------
    [INFO] Building iservport-ubivis 0.1-RELEASE
    [INFO] ------------------------------------------------------------------------
    [INFO] 
    [INFO] --- cf-maven-plugin:1.1.2:services (default-cli) @ iservport-ubivis ---
    [INFO] Services instances
    [INFO] 
      name      service  plan        bound apps   
      --------  -------  ----------  -------------
      ubivisDB  sqldb    sqldb_free  familiasegura

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD SUCCESS
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 16.947s
    [INFO] Finished at: Fri Aug 28 15:57:42 BRT 2015
    [INFO] Final Memory: 15M/197M

答案 2 :(得分:0)

我不知道在每次覆盖foreach循环中的<!DOCTYPE html> <html> <body> <form method="post"> <input id="search" type="text"/> <button onclick="return abc()">test</button> </form> <script> function abc() { var textt = document.getElementById("search"); if (textt.value == "test") { window.location.assign("http://www.google.com") } } </script> </body> </html> 属性时,您希望如何存储所有名称

循环就是为你做的事情:

name

我想,您完全清楚gymArray.name = "some name"; gymArray.name = "other name"; 的最后一个值是name。您可以使用other name运算符附加到最后一个值,这将导致一个大的名称字符串,或者将+属性更改为某个集合并添加新名称。也许name不是您的首选类型。

答案 3 :(得分:0)

我认为你应该实现为

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

并在循环中。

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

答案 4 :(得分: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;
    }
}