我有一个名为LabFileBase的基类.我构建了一个List并将我的派生类添加到它.我想根据我定义的键在List中搜索特定对象.我遇到的问题是你如何在LINQ表达式中转发?
以下是一些示例代码:
public abstract class LabFileBase
{
}
public class Sample1 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
public class Sample2 : LabFileBase
{
public string ID {get;set;}
public string Name {get;set;}
//..
}
Run Code Online (Sandbox Code Playgroud)
我想搜索特定的Sample2类型,但如果我使用这样的常规foreach循环,我需要向下转换:
foreach(var s in processedFiles) //processedFiles is a List<LabFileBase>
if (s is Sample2)
var found = s as Sample2;
if (found.ID = ID && found.Name == "Thing I'm looking for")
//do extra work
Run Code Online (Sandbox Code Playgroud)
我宁愿有这样的事情:
var result = processedFiles.Select(s => s.ID == SomeID && s.Name == SomeName);
Run Code Online (Sandbox Code Playgroud)
这是可能的,涉及到什么语法标点符号,或者foreach由于不同的对象而成为我唯一的选择.Sample1和Sample2只有ID和Name作为相同的字段.
编辑:感谢大家的支持和建议,我已经将几乎所有内容都输入了积压工具中.
要详细说明Jon的答案,OfType如果你不愿意将这些字段放入你的基类中,几乎肯定是正确的算子.例如:
foreach(var s in processedFiles.OfType<Sample2>())
if(s.ID == ID && s.Name == "Thing I'm looking for")
// whatever
foreach(var s in processedFiles.OfType<Sample1>())
if(s.ID == ID && s.Name == "Some other thing")
// and so on
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
712 次 |
| 最近记录: |