c#使用lambda检查对象是否属于某个动态类型(通过参数传递)

c#使用lambda检查对象是否属于某个动态类型(通过参数传递),c#,lambda,types,C#,Lambda,Types,我有一种方法可以检查某个文档是否属于某个类型,并选择对其进行处理: private void OpenOrActivateDocument(Type FormType) { var doc = dmMain.View.Documents. Where(x => x.Form is FormType). Select(x=>x).First(); // do something about the found (o

我有一种方法可以检查某个文档是否属于某个类型,并选择对其进行处理:

 private void OpenOrActivateDocument(Type FormType)
 {    var doc = dmMain.View.Documents.
          Where(x => x.Form is FormType).
          Select(x=>x).First();

          // do something about the found (or not found) doc
 }
这是一个调用上述方法的示例方法:

private void button1_click(Object sender, EventArgs e)
{
        OpenOrActivateDocument(typeof(BudgetExtractionWindow));
}

但是,我在这里得到一个错误:“其中(x=>x.Form是FormType)”。如果将其更改为特定类型(不是通过参数传递的),则不会出现问题。

您应该这样做:

 private void OpenOrActivateDocument(Type FormType)
 {    var doc = dmMain.View.Documents.
          Where(x => x.Form.GetType() == FormType)
          .FirstOrDefault();

      if (doc != null){
          // do something about the found doc
      } else {
          //not found, do some other things
      }    
 }
FormType
实际上是一个名为
FormType
对象实例,类类型为
type
。它不表示任何类似于您通常在类实例声明中使用的类名:
ClassType instance=new ClassType()

如果要检查
x.Form
是否属于该类型,则应使用对象的方法
GetType

此外,您还可以删除
Select
子句,因为它是多余的


FirstOrDefault
是在未找到时使其返回
null
,而不是抛出异常。

非常感谢!下面简单介绍一下.GetType()==和使用“是”有什么区别?@JeremyLoh不客气…:)欢迎来到stack overflow!
FormType.IsAssignableFrom(x.Form.GetType())
=
更相似。