これはおそらく不可能ですが、私はこのクラスを持っています:
public class Metadata<DataType> where DataType : struct
{
private DataType mDataType;
}
それ以外にもありますが、簡単にしましょう。ジェネリック型(DataType)は、whereステートメントによって値型に制限されています。私がやりたいのは、さまざまなタイプ(DataType)のこれらのメタデータオブジェクトのリストを用意することです。といった:
List<Metadata> metadataObjects;
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());
これは可能ですか?
抽象基本クラスとインターフェースの両方が、リストに追加できる要素のタイプを制限することにより、ある程度の制御を提供します。ボクシングがこれにどのように組み込まれるかもわかりません。
—
0b101010 2014
もちろん、.NET v4.0以降を使用している場合は、共分散が解決策です。
—
0b101010 2014
List<Metadata<object>>
トリックを行います。
@ 0b101010私は同じことを考えていましたが、残念ながら値の型での分散は許可されていません。OPには
—
nawfal 2014
struct
制約があるため、ここでは機能しません。参照
@ 0b101010、どちらも参照型のみを制限し、組み込みの値型と構造体は引き続き追加できます。また、最終的に、
—
Saeb Amini、2014
MetaData
元の値型の代わりに参照型のリストがあり、各要素の基になる値型に関する(コンパイル時の)情報がないため、実質的に「ボックス化」されます。
List<object>
?それらはボックス化/ボックス化解除を停止せず、キャストの必要性を取り除きません。そして最終的にMetadata
、実際のについて何も知らないオブジェクトを取得していDataType
ます。これらの問題に対処する解決策を探していました。インターフェース/クラスを宣言する場合、実装/派生したジェネリック型をジェネリックリストに入れることができるようにするために、無意味なレイヤー以外のを使用する場合とどのように違うのList<object>
ですか?