我定义了以下接口:
public interface IStep
{
string Name { get; set; }
}
public interface IStepBuildDataSet : IStep
{
DataSet Data { get; set; }
}
public interface IStepBuildFile : IStep
{
byte File { get; set; }
}
我有使用这些接口的代码:
public List<IStep> Steps { get; set; }
public void RunJob()
{
// pseudo code, need to update:
IStepBuildDataSet buildDataSet = Steps.Single(s => s is IStepBuildDataSet);
IStepBuildFile buildFile = Steps.Single(s => s is IStepBuildFile);
// call methods on Steps
}
替换伪代码的正确语法是什么?我想获得实现certian接口的列表中的步骤。列表中只有一个。
答案 0 :(得分:7)
您可以使用OfType使其更加清晰:
IStepBuildDataSet buildDataSet = Steps.OfType<IStepBuildDataSet>().Single();
IStepBuildFile buildFile = Steps.OfType<IStepBuildFile>().Single();
请注意,您不需要转换结果,因为OfType会为您执行此操作。
答案 1 :(得分:0)
您有IStep列表,因此列表中可能有多个不同类型的Istep对象。所以在foreach循环中这样做会更好。
foreach(IStepBuildDataSet buildDataSet in Steps.OfType<IStepBuildDataSet>())
{
//do something here.
}
foreach(IStepBuildFile buildFile in Steps.OfType<IStepBuildFile>())
{
//do something here.
}