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

gymsDataTableは 20 行の名前が含まれています。カスタム クラスを作成しました。コードは次のとおりです。

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

20個の名前が入力されると予想していstring nameましたが(データテーブルには20行あるため)、オンラインでデバッグするとreturn gymArray、名前のカスタム配列全体が表示されるのではなく、最後の行の名前のみが表示されます。

誰かが私が間違っていることを理解していますか?

4

5 に答える 5

2

実際には配列を作成していません。1 つの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 オブジェクトの一般的な List を作成し、それをGetAllGymsByStarsメソッドから返しました。

于 2015-08-28T19:36:03.150 に答える
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 に答える
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 に答える