1

2 セットのデータを含むクラスがあります。

  1. X の値のリスト。
  2. Y の値のリスト。

現在、X と Y は、可能な組み合わせで文字列/倍精度/整数/日時のいずれかを保持できます。唯一のルールは、任意の時点で両方のリストに同じ数の値が含まれている必要があるということです。

AddXY メソッドと RemoveAt メソッドを介してのみアクセスを提供することで、常に同じデータを保持するという問題を解決できました (任意の時点で、X List と Y List の両方が同じサイズであることを保証できます)。

さらに、このクラスのエンド ユーザーが、以下に示すように、インデクサーを介して X 値と Y 値にアクセスできるようにしたいと考えています。

someClassInstance.X[i] および someClassInstance.Y[i]

C# にはこれに関するオプションがないため、X と Y を IList (AsReadOnly) メソッドとして公開することにしました。

ここで、Generics を使用して型を制約するというアイデアを検討しました。しかし、この特定のケースに適切な例を見つけることができません。

どう言えばいいの

public class MyClass<P, Q> 
     where P : Double, String, Integer, DateTime 
     and Q : Double, String, Integer, DateTime

アイデアを完全に破棄して、ある種のタプルまたはそのようなデータ構造を検討する必要がありますか?

編集:制約を値型にすることはできないことも知っていますが、これはどのように機能しますか?

4

1 に答える 1

4

あなたが求めていることはC#では不可能です。これらの型を統一するジェネリック型の制約はありません。

あなたができる最善のことは、静的コンストラクターなどで実行時にチェックすることです。このようなもの:

public class MyClass<P, Q>
{
    static MyClass() 
    {
       if (IsValidType(typeof(P) 
           && IsValidType(typeof(Q))
       throw new NotSupportedException("invalid type for MyDataStructure");
    }
    static bool IsValidType(Type type)
    {
       // logic to check whether type is acceptable
       return true;
    }
}

ただし、やや人工的に見えるため、これには反対することをお勧めします。

于 2012-11-28T07:06:48.613 に答える