2013-03-13 33 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