鉴于此example:
// Create an arary of car objects.
car[] arrayOfCars= new car[]
{
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car("Honda",1977)
};
我试过这样的事情:
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
arrayOfCars[] = new car(drow["make"].ToString(), drow["year"].ToString());
}
如何在循环数据表时向阵列添加其他数据?
UPDATE1:
我选择了@Reed提出的解决方案。
// Create the array, specifying the total length
car[] arrayOfCars = new car[dtable.Rows.Count];
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
// Assign each car to the specific index within the array (arrayOfCars[i])
arrayOfCars[i] = new car(drow["make"].ToString(), drow["year"].ToString());
}
答案 0 :(得分:10)
创建数组后,无法将元素添加到数组中。不使用数组,而是使用List<car>
。这将允许您调用.Add来添加元素。
例如:
// Create an List of car objects.
List<car> listOfCars = new List<car>()
{
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car("Honda",1977)
};
然后你可以这样做:
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
listOfCars.Add(new car(drow["make"].ToString(), drow["year"].ToString()));
}
您可以像使用数组一样使用listOfCars
,并按索引访问元素:
car myCar = listOfCars[3];
如果你必须有一个数组,请在完成“添加到列表”之后通过调用列表中的ToArray()来创建它:
// ... Add as above...
car[] arrayOfCars = listOfCars.ToArray(); // Creates an array from your list
编辑:
如果您只是尝试从DataTable中分配和构造数组,并且在构造之后不需要向其添加元素,则可以使用数组,如下所示:
// Create the array, specifying the total length
car[] arrayOfCars = new car[dtable.Rows.Count];
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
// Assign each car to the specific index within the array (arrayOfCars[i])
arrayOfCars[i] = new car(drow["make"].ToString(), drow["year"].ToString());
}
答案 1 :(得分:3)
创建数组后,不能添加任何新元素。但是,您可以将其中的元素重新分配给新对象。如果你想要新的元素(以便你的数组增长)使用Generic:List<T>
(如上所述)。如果你想重新分配已经存在的元素,请使用以下内容(我没有编译它,所以你可能需要进行更改:)
for(int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
cars[i] = new car(drow["make"].ToString(), drow["model"].ToString());
}
答案 2 :(得分:2)
阵列无法就地调整大小。
相反,您应该使用List<Car>
并致电Add
,如下所示:
List<car> cars= new List<car>()
{
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car("Honda",1977)
}; //C# 3 collection initializer
for (int i = 0; i < dtable.Rows.Count; i++)
{
DataRow drow = dtable.Rows[i];
cars.Add(new car((string)drow["make"], (int)drow["year"]));
}
答案 3 :(得分:2)
您也可以使用LINQ来执行此操作...
var fromTable = from row in dtable.Rows.OfType<DataRow>()
let make = row["make"] as string
let year = (int)row["year"]
select new car(make, year);
car[] arrayOfCars = listOfCars.Concat(fromTable).ToArray();
...如果DataTable中有大量行,并且您想尝试挤出一些性能,那么您可以这样做......
var makeIndex = dtable.Columns["make"].Ordinal;
var yearIndex = dtable.Columns["year"].Ordinal;
var fromTable = from row in dtable.Rows.OfType<DataRow>()
let items = row.ItemArray
let make = items[makeIndex] as string
let year = (int)items[yearIndex]
select new car(make, year);
答案 4 :(得分:1)
如果您知道总数中有多少元素,我建议您使用数组。否则你最好使用List作为Reed和SLaks建议。
答案 5 :(得分:1)
如上所述 - 使用List<Car>
来获得包含动态数量元素的列表 - 使用方法Add(Car item)
添加新实例。请务必访问相应的MSDN网站:http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx
顺便说一句:操作符[]
在C#中不起作用,即使你创建了一个数组,例如5个元素并想添加第一个元素。
答案 6 :(得分:1)
如果您有.NET 3.5,请使用Array.Resize()。
// Create an arary of car objects.
car[] arrayOfCars= new car[]
{
new car("Ford",1992),
new car("Fiat",1988),
new car("Buick",1932),
new car("Ford",1932),
new car("Dodge",1999),
new car("Honda",1977)
};
// resize the array...
var rowCount = dtable.Rows.Count;
var offSet = arrayOfCars.Length;
Array.Resize<car>(ref arrayOfCars, rowCount + offSet);
// populate the new (empty) array elements from the database...
for (int i = 0; i < rowCount; i++)
{
DataRow drow = dtable.Rows[i];
arrayOfCars[i + offSet] =
new car(drow["make"].ToString(), drow["year"].ToString());
}