当子类型仅在运行时已知时,有没有办法从特定子类型的集合中获取对象?类似于:
class A
{}
class B : A
{}
class C : A
{}
Main()
{
List<A> outsideList = new List<A>() {new A(), new B(), new C()};
foreach(var ojb in outsideList)
{
dosomethingwithanobject(ojb);
}
}
void dosomethingwithanobject(A obj)
{
List<A> intenalList = new List<A>() { new C(), new A(), new B()};
// this can be A, B or C
type DESIREDTYPE = typeof(obj);
var item = list.GetSubType<DESIREDTYPE>().FirstOrDefault();
// do something with the item
}发布于 2019-02-08 12:47:57
我认为你可以使用下面的代码:
var result = intenalList.Where(x => x.GetType() == obj.GetType()).FirstOrDefault();发布于 2019-02-09 05:11:34
LINQ有两个用于将未知(或父)类型序列转换为子类型的操作:Cast和OfType。
Cast将类型转换应用于每个元素,如果类型转换无效,则失败。OfType只返回可以转换为新类型的元素。
所以,
var item = list.OfType<DESIREDTYPE>().FirstOrDefault();https://stackoverflow.com/questions/54586015
复制相似问题