首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以将类型动态分配给泛型linq表达式?

有没有一种方法可以将类型动态分配给泛型linq表达式?
EN

Stack Overflow用户
提问于 2019-02-08 12:30:56
回答 2查看 36关注 0票数 0

当子类型仅在运行时已知时,有没有办法从特定子类型的集合中获取对象?类似于:

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-08 12:47:57

我认为你可以使用下面的代码:

代码语言:javascript
复制
var result = intenalList.Where(x => x.GetType() == obj.GetType()).FirstOrDefault();
票数 1
EN

Stack Overflow用户

发布于 2019-02-09 05:11:34

LINQ有两个用于将未知(或父)类型序列转换为子类型的操作:CastOfType

Cast将类型转换应用于每个元素,如果类型转换无效,则失败。OfType只返回可以转换为新类型的元素。

所以,

代码语言:javascript
复制
var item = list.OfType<DESIREDTYPE>().FirstOrDefault();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54586015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档