c# - 检查任何类型的数组是否包含元素
问题描述
我使用反射接收到的两个参数可能是不同类型的。
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)' 的类型参数。尝试明确指定类型参数。
我怎样才能实现我的目标?
解决方案
我能想到的一种方法是将数组转换为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;
}
}
请注意,这==
在这里不起作用,因为int
s 将被装箱。
如果您的数组只有一维,Array.IndexOf
也可以(使用castedArray
and value
),但如果您也想处理 2D 或 3D 数组,则需要检查Rank
并使用嵌套的 for 循环。
推荐阅读
- javascript - ReactJS 基于计时器为边框或圆圈设置动画
- c++ - Open_gl 1 颜色着色器
- electron - 将电子更新到 6.0.0 后 html2canvas 的大小问题
- google-cloud-platform - 防止 GCP 中的 IAM 升级
- nativescript - 升级到 nativescript 6 后出现 global.process.platform 未定义错误
- sql - 唯一索引的分区列必须是索引键错误的子集
- mysql - MySQL:在单个语句中选择同一字段的奇数和偶数
- python - 如何在列表中搜索字符串并输出包含该字符串的所有值?
- java - 如何在Java中转换二维整数数组中的有序对数组
- c++ - 屏幕分辨率高于 1920x1080 时捕获视频