根据枚举值返回一个ObservableCollection

时间:2013-03-13 08:37:22

标签: c# interface observablecollection generic-collections

我的C#应用​​程序定义了以下枚举:

public enum ItemTypes {
  REQUIREMENTS,
  TEST_CASES
}

现在我想定义一个接口,它获取与ItemTypes之一匹配的所有项目,并将它们作为ObservableCollection返回。由于我不知道枚举值是什么,我认为使用通用T将是可行的方法。但是,由于无法识别T,以下情况不起作用:

interface IDataSourceService {
  ObservableCollection<T> GetItems(Enums.ItemTypes itemType);
}

实现类看起来像这样(或多或少的伪代码):

ObservableCollection<T> GetItems(Enums.ItemTypes itemType) {
  // Define an ObservableCollection which could hold "anything".
  ObservableCollection<T> result = null;
  switch (itemType) {
    case Enums.ItemTypes.REQUIREMENTS:
      // Get all requirements from the data source
      ObservableCollection<CRequirement> result = new ObservableCollection<CRequirement>();
      result = foo();
      break;

    case Enums.ItemTypes.TEST_CASES:
      // Get all test cases from the data source
      ObservableCollection<CTestCase> result = new ObservableCollection<CTestCase>();
      result = bar();
      break;
  }      
  return result;
}

1 个答案:

答案 0 :(得分:3)

您打算如何使用您的功能结果?

如果您想通过CRequirementCTestCase共享的公共界面使用它,那么您需要将此公共界面分开,例如IMyCommonInterface并让你的两个类实现它。

然后您可以使用ObservableCollection<IMyCommonInterface>

如果另一方面你必须测试函数的结果并根据类型分叉代码,那么你可以简单地定义你的函数来返回纯object,你将在以后测试无论如何都要正确的类型。