我倾向于使用结构的ArrayLists。然后很容易用foreach在列表中循环。
我遇到的问题是我不能使用foreach来修改结构内容,并且必须使用for和messy类型转换。
((dataStructure)files[x]).name = here;
有更简洁的方法吗?
答案 0 :(得分:13)
是的,有:不使用无类型ArrayList
,不推荐使用这些类型,而使用System.Collections.Generic
中的泛型类型。在您的情况下:List<T>
。
您仍然无法将其与foreach
循环结合使用来修改结构值,但至少您不必进行强制转换。
答案 1 :(得分:7)
我知道这听起来过于简单但 just say no to mutable value types 。
他们几乎从不解决问题的正确方法。有一些非常的例外,但是类几乎总是 。
此外,如果您真的使用ArrayList
,那么您将承担拆箱费用......(正如Konrad所说,如果您可以使用.NET 2.0,那么请使用泛型。)
如果你真的坚持使用可变结构,那么使用for
循环而不是foreach
。但请,请转到课程。
答案 2 :(得分:1)
使用ArrayList
的{strong>通用版本:List<DataStructure>
。
这样事情看起来好多了:
files[x].name = here;
答案 3 :(得分:0)
是的,有些情况List <T>
也没用。在这些情况下,手册中最古老的技巧有效。而不是foreach
,你应该使用while循环:
while (listItem.Count >0)
{
//do operation with 0th element of List Item always like
deletefunc(lisItem[0]);
}