C# 如何从混合数据类型数组中仅提取一个数据类型值?

C# 如何从混合数据类型数组中仅提取一个数据类型值?,c#,arrays,multidimensional-array,element,custom-data-type,C#,Arrays,Multidimensional Array,Element,Custom Data Type,我的数组列表中有4种不同的数据类型。这些特定于我的应用程序(不是常见的数据类型) 例如,假设数组abc包含10个值 数据类型1-4值, 数据类型2-2值, 数据类型3-2值, 数据类型4-2值。 ? 我需要单独提取Datatype1(即4个值)。如何执行此操作您可以使用根据特定类型筛选阵列列表 using System; using System.Collections; using System.Linq; public class Program {

我的数组列表中有4种不同的数据类型。这些特定于我的应用程序(不是常见的数据类型) 例如,假设数组abc包含10个值 数据类型1-4值, 数据类型2-2值, 数据类型3-2值, 数据类型4-2值。 ? 我需要单独提取Datatype1(即4个值)。如何执行此操作

您可以使用根据特定类型筛选
阵列列表

using System;
using System.Collections;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var arrayList = new ArrayList();
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        
        foreach (Type1 t in arrayList.OfType<Type1>())
        {
            Console.WriteLine(t.ToString());
        }
    }
}

public class Type1
{
    
}

public class Type2
{
}

public class Type3
{
}
使用系统;
使用系统集合;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var arrayList=新的arrayList();
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
foreach(类型()的arrayList.OfType()中的Type1T)
{
Console.WriteLine(t.ToString());
}
}
}
公共类类型1
{
}
公共类类型2
{
}
公共类类型3
{
}
根据您问题中的语言,我假设您使用的是
ArrayList
,但此扩展方法适用于实现
IEnumerable
的任何东西。因此,即使您使用的是
对象[]
列表

也就是说,如果您实际使用,那么您可能希望签出,因为Microsoft不建议您使用该类

我们不建议您在新开发中使用ArrayList类。相反,我们建议您使用泛型
列表
类。ArrayList类设计用于保存对象的异构集合。但是,它并不总是提供最佳性能。相反,我们建议如下:

对于异构对象集合,请使用
列表
(在C#中)或列表(对象)(在Visual Basic中)类型

对于对象的同质集合,请使用
列表
类。 有关这些类的相对性能的讨论,请参见
列表中的性能注意事项
参考主题。有关使用泛型而非非泛型集合类型的一般信息,请参见GitHub上不应使用非泛型集合

您可以使用根据特定类型筛选
ArrayList

using System;
using System.Collections;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var arrayList = new ArrayList();
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        arrayList.Add(new Type1());
        arrayList.Add(new Type2());
        arrayList.Add(new Type3());
        
        foreach (Type1 t in arrayList.OfType<Type1>())
        {
            Console.WriteLine(t.ToString());
        }
    }
}

public class Type1
{
    
}

public class Type2
{
}

public class Type3
{
}
使用系统;
使用系统集合;
使用System.Linq;
公共课程
{
公共静态void Main()
{
var arrayList=新的arrayList();
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
Add(新的Type1());
Add(新类型2());
Add(新类型3());
foreach(类型()的arrayList.OfType()中的Type1T)
{
Console.WriteLine(t.ToString());
}
}
}
公共类类型1
{
}
公共类类型2
{
}
公共类类型3
{
}
根据您问题中的语言,我假设您使用的是
ArrayList
,但此扩展方法适用于实现
IEnumerable
的任何东西。因此,即使您使用的是
对象[]
列表

也就是说,如果您实际使用,那么您可能希望签出,因为Microsoft不建议您使用该类

我们不建议您在新开发中使用ArrayList类。相反,我们建议您使用泛型
列表
类。ArrayList类设计用于保存对象的异构集合。但是,它并不总是提供最佳性能。相反,我们建议如下:

对于异构对象集合,请使用
列表
(在C#中)或列表(对象)(在Visual Basic中)类型

对于对象的同质集合,请使用
列表
类。 有关这些类的相对性能的讨论,请参见
列表中的性能注意事项
参考主题。有关使用泛型而非非泛型集合类型的一般信息,请参见GitHub上不应使用非泛型集合


谢谢你,约书亚。不,我使用的是数组[]而不是数组列表。然而,这将为我工作。但我问这个问题的意图是,无论如何,在不循环每个元素的情况下这样做?由于循环元素消耗更多的时间,我们可以使用任何方法,如array.cast()。如果数组中的任何对象无法转换为
datatype1
,则any()
cast()
将抛出
InvalidCastException
。而
Any()
将只返回
true
false
,指示
IEnumerable
中是否有任何项。。。它无法获取
数组
中类型为
datatype1
的所有项,这就是您的问题所在。我担心,如果您拥有的是
数组
对象[]
,那么没有任何方法可以获取
datatype1
类型的所有元素