C# 根据枚举值返回ObservableCollection

C# 根据枚举值返回ObservableCollection,c#,interface,observablecollection,generic-collections,C#,Interface,Observablecollection,Generic Collections,我的C#应用程序定义了以下枚举: public enum ItemTypes { REQUIREMENTS, TEST_CASES } 现在我想定义一个接口,该接口获取所有与ItemTypes之一匹配的项,并将它们作为observetecollection返回。由于我不知道传递的枚举值是什么,我认为使用泛型t将是一种可行的方法。但是,由于未识别出T,以下情况不起作用: interface IDataSourceService { ObservableCollection<T&

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

public enum ItemTypes {
  REQUIREMENTS,
  TEST_CASES
}
现在我想定义一个接口,该接口获取所有与
ItemTypes
之一匹配的项,并将它们作为
observetecollection
返回。由于我不知道传递的枚举值是什么,我认为使用泛型
t
将是一种可行的方法。但是,由于未识别出
T
,以下情况不起作用:

interface IDataSourceService {
  ObservableCollection<T> GetItems(Enums.ItemTypes itemType);
}
接口IDataSourceService{
ObservableCollection GetItems(Enums.ItemTypes itemType);
}
实现类应该是这样的(或多或少是伪代码):

ObservableCollection GetItems(Enums.ItemTypes-itemType){
//定义一个可观察的集合,它可以容纳“任何东西”。
ObservableCollection结果=空;
开关(项目类型){
案例枚举.项目类型.要求:
//从数据源获取所有需求
ObservableCollection结果=新的ObservableCollection();
结果=foo();
打破
案例枚举.ItemTypes.TEST\u案例:
//从数据源获取所有测试用例
ObservableCollection结果=新的ObservableCollection();
结果=bar();
打破
}      
返回结果;
}

您计划如何使用函数的结果

如果您希望通过共享
crerequirement
CTestCase
的公共接口来使用它,那么您需要分离此公共接口,例如
IMyCommonInterface
,并使两个类都实现它

然后,您可以使用
observateCollection


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

您打算如何使用函数的结果

如果您希望通过共享
crerequirement
CTestCase
的公共接口来使用它,那么您需要分离此公共接口,例如
IMyCommonInterface
,并使两个类都实现它

然后,您可以使用
observateCollection


另一方面,如果您必须测试函数的结果并根据类型派生代码,那么您可以简单地定义函数以返回纯
对象
,您将在稍后测试正确的类型。如果
IDataSourceService
IDataSourceService
,则将识别
T
。但是,在使用该接口时,您还必须指定该类型。
T
将在
IDataSourceService
IDataSourceService
时被识别。但是,在使用该接口时,还必须指定该类型。函数的结果应作为视图模型属性,该属性将绑定到某个WPF控件。我想我将使用第二部分,即返回一个
对象
。您还应该理解代码无法工作的原因:为了使用泛型类型,必须在编译时知道类型。您的代码只能在运行时在switch语句中推断返回类型。函数的结果应作为视图模型属性,该属性将绑定到某些WPF控件。我想我将使用第二部分,即返回一个
对象
。您还应该理解代码无法工作的原因:为了使用泛型类型,必须在编译时知道类型。您的代码只能在运行时在switch语句中推断返回类型。
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;
}