2013-03-13 37 views
0

我的C#应用​​程序定义了以下枚举:返回取决于枚举值一个ObservableCollection

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

如果'IDataSourceService'是'IDataSourceService ''''T'将被识别。但是当你使用接口的时候,你也必须指定这种类型。 – Default 2013-03-13 08:39:37

回答

3

你计划如何使用你的功能的结果?

如果您想通过CRequirementCTestCase共享的通用接口来使用它,则需要将此通用接口分开,例如IMyCommonInterface,并让你的两个类都实现它。您可以使用ObservableCollection<IMyCommonInterface>

如果另一方面,你将不得不测试函数的结果,并根据类型分叉代码,那么你可以简单地定义你的函数返回一个纯粹的object,你将在稍后测试它的正确性反正键入。

+0

该函数的结果应作为视图模型属性,将绑定到某些WPF控件。我想我会继续第二部分,即返回一个“对象”。 – 2013-03-13 08:59:43

+0

正如Petar建议的那样,返回'ObservableCollection '。你也应该明白你的代码为什么不起作用:为了使用泛型类型,类型必须在编译时被知道。您的代码只能在运行时在switch语句中推导出返回类型。 – AlexFoxGill 2013-03-14 15:12:18