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())
比=
更相似。