自定义对象不存储所有名称
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;
}
}
我的 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;
}
}