0

我的 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;
}
4

1 回答 1

3

你打算如何使用你的函数的结果?

如果你想通过一个公共接口来使用它CRequirementCTestCase共享,那么你需要分离这个公共接口IMyCommonInterface,例如让你的两个类都实现它。

然后你可以使用ObservableCollection<IMyCommonInterface>.

另一方面,如果您必须测试函数的结果并根据类型分叉代码,那么您可以简单地定义您的函数以返回一个 pure object,您稍后将测试正确的类型。

于 2013-03-13T08:44:58.620 回答