在List中选择与接口匹配的项目

时间:2014-09-04 23:15:09

标签: c# .net linq

我定义了以下接口:

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接口的列表中的步骤。列表中只有一个。

2 个答案:

答案 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.

}