首页 > 解决方案 > 检查任何类型的数组是否包含元素

问题描述

我使用反射接收到的两个参数可能是不同类型的。

object array;
object value;

...

array=new int[] { 1,2,3};
value=3;

...

array=new string[] { "one","two","three"};
value="two";

我想知道value是否在里面array,不管是哪种类型。以下命令无法编译:

bool isInside=Array.Exists(array, q=>q==value);

无法从用法中推断出方法 'Array.Exists(T[], Predicate)' 的类型参数。尝试明确指定类型参数。

我怎样才能实现我的目标?

标签: c#arrays

解决方案


我能想到的一种方法是将数组转换为Array,然后使用 for 循环搜索它:

var castedArray = (Array)array;
for (int i = 0 ; i < castedArray.Length ; i++) {
    if (castedArray.GetValue(i).Equals(value)) {
        Console.WriteLine("It exists!");
        break;
    }
}

请注意,这==在这里不起作用,因为ints 将被装箱。

如果您的数组只有一维,Array.IndexOf也可以(使用castedArrayand value),但如果您也想处理 2D 或 3D 数组,则需要检查Rank并使用嵌套的 for 循环。


推荐阅读