为了账号安全,请及时绑定邮箱和手机立即绑定

将对象转换为与 IEnumerable 集合相同的类型

将对象转换为与 IEnumerable 集合相同的类型

C#
aluckdog 2022-01-16 19:56:31
本质上,我有带参数的函数: ContainsValue(IEnumerable collection, object obj)我需要使用 Equals()Contains检查集合obj 。具体来说,collection 是一个字符串数组,而 obj 是一个自定义类型/类(它称为 FString,我不完全理解它是什么,但它至少在某种程度上是从字符串派生的)。不幸的是,解决方案需要是通用的,所以我不能明确引用自定义类型。所以我需要一种方法将 obj 转换为集合的任何类型。这可能吗?编辑:static bool ContainsValue(IEnumerable collection, object obj){    // cast obj into same type as collection elements    foreach(var element in collection)    {        if() // element equals obj        {            return true;        }    }    return false;}
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

您应该可以在您的if声明中使用它:

if(object.Equals(element, obj))

然后你根本不需要投射,或者担心空值等。


查看完整回答
反对 回复 2022-01-16
?
MMMHUHU

TA贡献1834条经验 获得超8个赞

使用IEnumerable's OfType方法提取您正在寻找的目标类型,如果有一些检查您提到的相等情况......例如这个例子

return collection.OfType<string>()
                 .Any( str => str.Equals("Jabberwocky"));


查看完整回答
反对 回复 2022-01-16
?
守着一只汪

TA贡献1872条经验 获得超3个赞

您可以像这样使用它(如果您可以访问集合的字段):


string objAsString = obj?.ToString() ?? "";


if(collection.Any(x => x.field == objAsString))

{

    //Do something...

}


查看完整回答
反对 回复 2022-01-16
  • 3 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信