3

少し問題が発生しましたが、この問題を解決する最善の方法がわかりません。

新しいインスタンスの作成時にデータ型が指定されることを期待するクラスを作成しました。System.Collections.Generic.List<T>指定されたタイプのアイテムの数を格納するクラスと同じように。しかし、私のクラスには、クラスと同じまたは類似の機能がありList<T>ません。

クラスの新しいインスタンスを作成すると、たとえば次のようになります。

string phrase = "Some string type data.";
MyClass<string> data = new MyClass<string>( () => phrase );

MyClass<T>その後、私のクラスは、与えられるデータのタイプ(データタイプはどこですか)に関係なく結果を与えるいくつかのメソッドを提供しますT。string、bool、int、またはその他の種類であるかどうかは関係ありません。

MyClassクラスをテストしましたが、期待どおりに機能します。では、のようなコレクションクラス内に、さまざまなデータ型の各要素の要素を格納するにはどうすればよいですかList<>

例を挙げましょう(正しく書く方法がわからないため、コードに構文エラーが含まれます):

// My intent... Not sure how to do it.
string phrase = "Some string data type.";
int number = 23;
bool boolData = false;

List<MyClass<T>> list = new List<MyClass<T>>();

list.Add( new MyClass<string>( () => phrase ) );
list.Add( new MyClass<int>( () => number ) );
list.add( new MyClass<bool>( () => boolData ) );

ご覧のとおり、付与されたデータ型が異なるMyClassの要素の数を格納する方法がわかりません。それらがすべて同じ付与されたデータ型である場合、この問題は発生しません。

例えば:

// How it should be done. But not what I need.
string phrase1 = "Hello Phrase 1.";
string phrase2 = "Hello Phrase 2.";

List<MyClass<string>> list = new List<MyClass<string>>();

list.Add(new MyClass<string>( () => phrase1) );
list.Add(new MyClass<string>( () => phrase2) );

これが私が達成したいことであれば問題はありませんが、この最後の例の前に例示したことを達成したいので、それをどのように行うのが最善かわかりません。

基本的にそれが私の問題です。私の質問は少し奇妙かもしれないと思うので、いくつかの基本的な例を示しました。正直なところ、私の用語は適切ではないと思います。

これはおそらくあなた方の何人かにとっては非常に簡単です。あなたの助けに感謝します。

4

1 に答える 1

7

通常、ジェネリック型の非ジェネリック基本クラス (またはインターフェイス) を作成します。

abstract class MyClass // Or interface
{
    // Anything useful but non-generic here
}

class MyClass<T> : MyClass
{
    // Anything using T
}

次に、を作成するだけList<MyClass>です。もちろん、メンバーの誰かにアクセスするには、キャストするMyClass<T>権利を知る必要がありますがT、それはやむを得ないと思います。

もちろん、制御MyClass<T>せず、有用な基本クラスを提供しない場合、これはあまり役に立ちませんが、C# にはこの状況で役立つものは何もありません。

于 2012-07-02T06:07:14.683 に答える