我可以像C+一样用C#固定类型的ArrayList吗+;?

我可以像C+一样用C#固定类型的ArrayList吗+;?,c#,arraylist,C#,Arraylist,我有一个ArrayList,其中包含固定类型的对象。 然而,每当我需要从一个特定的索引中提取一个对象时,我需要将它从对象类型转换为我的用户定义类型 P> C++中有一种方法来声明java类和C++类的固定类型的代码>代码> ARARYLIST/,还是有一个工作来避免每次类型化? 编辑: 很抱歉,我忘了提到我要求数据结构是线程安全的,而列表不是。否则,我会使用一个普通的数组。但我想避免在编写数组时显式锁定和解锁 因此,我考虑使用ArrayList,对其进行同步,但每次都需要进行类型转换。查看Sy

我有一个
ArrayList
,其中包含固定类型的对象。 然而,每当我需要从一个特定的索引中提取一个对象时,我需要将它从对象类型转换为我的用户定义类型

<> P> C++中有一种方法来声明java类和C++类的固定类型的代码>代码> ARARYLIST/<代码>,还是有一个工作来避免每次类型化? 编辑:

很抱歉,我忘了提到我要求数据结构是线程安全的,
列表
不是。否则,我会使用一个普通的
数组
。但我想避免在编写数组时显式锁定和解锁


因此,我考虑使用
ArrayList
,对其进行同步,但每次都需要进行类型转换。

查看System.Collections.Generic.List

您可以使用List类所利用的方法来创建强类型集合

要使用,只需按如下方式调用new List():

List<string> myStringList = new List<string>();
List myStringList=new List();

MSDN提供了一篇关于创建集合的一些方法的快速文章

是的,但您需要使用泛型。查看System.Collections.Generics命名空间中的List类。

Generic List FTW

var items = new List<someType>();
var items=newlist();

如果线程安全是您关心的问题,那么您可能会采取以下措施:

表示线程安全的无序对象集合

注意:这需要.NET 4。

您查看过吗?它基本上是List的线程安全版本

请注意,此集合是System.ServiceModel的一部分,因为它是为了支持WCF的通道调度器而添加的。但是,它是一个公共集合,可由任何代码使用,并且位于System.Collections.Generic命名空间中。它的所有方法和索引器都是同步的,因此您不必自己管理锁定。但是,请注意LINQ,因为此集合的枚举数未同步。如果希望使用枚举器或使用LINQ,则需要自己锁定SyncRoot:

var syncList = new SynchronizedCollection<int>();
// ...
lock(syncList.SyncRoot)
{
    var itemsInRange = syncList.Where(v => v > 100 && v < 1000);
}
var syncList=newsynchronizedcollection();
// ...
锁定(syncList.SyncRoot)
{
var itemsInRange=syncList.Where(v=>v>100&&v<1000);
}

请记住,它使用硬锁定(lock关键字),对于许多线程,它将不是性能最好的解决方案。如果您可以选择使用.NET 4.0,我会在新的名称空间中查找一些美味的新东西,如。

使用
System.Collections.Generic.List
。如果希望线程安全,只需在操作中锁定
SyncRoot
属性即可

一些代码:

List<string> list = new List<string>();

lock (list.SyncRoot) {
   list.Add("Hello World");
}
List List=新列表();
锁(list.SyncRoot){
添加(“你好世界”);
}

如果您发现每次锁定都很烦人,您可以重写List类并提供对成员函数的同步访问。

很抱歉,我忘了提到我需要线程安全的数据结构,很抱歉,我忘了提到我需要线程安全的数据结构,我认为List不是线程安全的,如果我是,请纠正我wrong@Kazoom更新了MSDN关于集合线程安全的文章。很抱歉,我忘了提到我需要的数据结构是线程安全的,我认为列表不是线程安全的,请更正我的错误。此类型的公共静态成员是线程安全的。很抱歉,我忘了提到我需要的数据结构是线程安全的,我认为列表不是线程安全的,如果我错了请纠正我,这种类型的公共静态成员是线程安全的@欧共体-不完全是。我不明白那篇文章为什么这么说,但它的正下方写着“一个列表(t)只要不修改集合,就可以同时支持多个读取器。通过集合枚举本质上不是线程安全过程。在枚举与一个或多个写访问争用的罕见情况下,确保线程安全的唯一方法是在整个枚举期间锁定集合。要允许要让多个线程访问该集合进行读写,您必须实现自己的同步。”我错过了学习列表之前的时间。这让我几乎重写了我以前用arraylist写的所有东西。你有没有考虑过或读过这篇文章: