我的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;
}
答案 0 :(得分:3)
您打算如何使用您的功能结果?
如果您想通过CRequirement
和CTestCase
共享的公共界面使用它,那么您需要将此公共界面分开,例如IMyCommonInterface
并让你的两个类实现它。
然后您可以使用ObservableCollection<IMyCommonInterface>
。
如果另一方面你必须测试函数的结果并根据类型分叉代码,那么你可以简单地定义你的函数来返回纯object
,你将在以后测试无论如何都要正确的类型。