linq 在c#中如何将每个对象从对象数组中插入到对应的对象中?

xwbd5t1u  于 2023-02-14  发布在  C#
关注(0)|答案(2)|浏览(152)

这件事很简单,所以请给我一个参考,如果有一个或答案。我有一个数组不同的不可重复的对象,例如

object[] data { Cat, Dog, Bird };

所以我需要将数组中的每个对象插入到对应的对象中,类似于:

Cat cat = data.Select(x => (Cat)x).FirstOrDefault();
Dog dog = data.Select(x=>(Dog)x).FirstOrDefault();
.
.
.

我试过:

using System.Linq;

Cat cat = data.Select(x => (Cat)x).FirstOrDefault();
Dog dog = data.Select(x=>(Dog)x).FirstOrDefault();

还有这个

Cat cat = (Cat)data.Select(x => x).FirstOrDefault();

但我只得到了

System.InvalidCastException: 'Specified cast is not valid.'
1tu0hz3e

1tu0hz3e1#

这将帮助您:

using System.Linq;

Cat myCat = data.FirstOrDefault(x => x.GetType() == typeof(Cat)) as Cat;
Dog myDog = data.FirstOrDefault(x => x.GetType() == typeof(Dog)) as Dog;

了解Object.GetType MethodType

    • 编辑:**

正如@Klaus的注解所指出的,它不适用于子类,在这种情况下,您可以使用OfType

Cat myCat = data.OfType<Cat>().FirstOrDefault();
Dog myDog = data.OfType<Dog>().FirstOrDefault();
njthzxwz

njthzxwz2#

通过使用@FortyTwo的答案,您还可以创建一个泛型扩展方法来从对象数组中获取特定类型的第一个对象。

public static class ObjectArrExtensions
{
    public static TValue? GetFirstObjectOf<TValue>(this IEnumerable<object> objects) where TValue : class
    { 
        return objects.OfType<TValue>().FirstOrDefault();
    }
}

结果:

object[] objects = { Cat, Dog }
var dog = objects.GetFirstObjectOf<Cat>();

相关问题