【发布时间】:2010-10-26 04:00:01
【问题描述】:
我倾向于使用结构的 ArrayLists。然后很容易用 foreach 循环遍历列表。
我遇到的问题是我不能使用 foreach 来修改结构内容,而必须使用 for 和混乱的类型转换。
((dataStructure)files[x]).name = here;
有没有更整洁的方法?
【问题讨论】:
标签: c# arraylist structure casting
我倾向于使用结构的 ArrayLists。然后很容易用 foreach 循环遍历列表。
我遇到的问题是我不能使用 foreach 来修改结构内容,而必须使用 for 和混乱的类型转换。
((dataStructure)files[x]).name = here;
有没有更整洁的方法?
【问题讨论】:
标签: c# arraylist structure casting
是的,有:不要使用无类型的ArrayList,这些类型已被弃用,取而代之的是System.Collections.Generic 中的泛型类型。在你的情况下:List<T>。
您仍然不能将它与foreach 循环结合使用来修改结构值,但至少您不必强制转换。
【讨论】:
我知道这听起来很简单,但 just say no to mutable value types。
他们几乎是从解决问题的正确方法。有非常少数例外,但类几乎总是要走的路。
此外,如果您真的在使用 ArrayList,那么您已经产生了拆箱成本...(正如 Konrad 所说,如果您可以使用 .NET 2.0,那么请使用泛型。)
如果您真的坚持使用可变结构,请使用for 循环而不是foreach。但是,无论如何,请换班。
【讨论】:
使用ArrayList的通用版本:List<DataStructure>。
这样事情看起来好多了:
files[x].name = here;
【讨论】:
是的,在某些情况下List <T> 也没有用。在这些情况下,手册中最古老的技巧起作用了。而不是foreach,你应该使用while循环:
while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
deletefunc(lisItem[0]);
}
【讨论】: