C# 根据枚举值返回ObservableCollection
我的C#应用程序定义了以下枚举: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&
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;
}