0

私の C# アプリケーションは、次の列挙を定義します。

public enum ItemTypes {
  REQUIREMENTS,
  TEST_CASES
}

ItemTypesここで、 の 1 つに一致するすべてのアイテムを取得し、それらを として返すインターフェイスを定義したいと思います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;
}
4

1 に答える 1

3

関数の結果をどのように使用する予定ですか?

CRequirement共有する共通インターフェースを介してそれを使用したい場合はCTestCase、この共通インターフェースを分離する必要があります。たとえばIMyCommonInterface、両方のクラスにそれを実装させる必要があります。

その後、使用できますObservableCollection<IMyCommonInterface>

一方、関数の結果をテストし、型に基づいてコードをフォークする必要がある場合は、単純に関数を定義して pure を返すことができます。objectこれは、後で正しい型をテストします。

于 2013-03-13T08:44:58.620 に答える