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

本质上,我有带参数的函数: 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;

}


aluckdog
浏览 196回答 3
3回答

青春有我

您应该可以在您的if声明中使用它:if(object.Equals(element, obj))然后你根本不需要投射,或者担心空值等。

MMMHUHU

使用IEnumerable's&nbsp;OfType方法提取您正在寻找的目标类型,如果有一些检查您提到的相等情况......例如这个例子return&nbsp;collection.OfType<string>() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Any(&nbsp;str&nbsp;=>&nbsp;str.Equals("Jabberwocky"));

守着一只汪

您可以像这样使用它(如果您可以访问集合的字段):string objAsString = obj?.ToString() ?? "";if(collection.Any(x => x.field == objAsString)){&nbsp; &nbsp; //Do something...}
打开App,查看更多内容
随时随地看视频慕课网APP