データのフィールドを表すオブジェクトがあるとします。そのオブジェクトには、名前、タイプ、値、長さのプロパティが必要です。オブジェクトは次のとおりです。
class Field<T>
{
public string Name { get; set; }
public Type Type
{
get
{
return typeof(T);
}
}
public int Length { get; set; }
public T Value { get; set; }
}
コードのユーザーに特定のタイプの値のみを割り当てることを強制したいので、ジェネリックを使用しました。
問題は、フィールドのリストを作成したいときです。
このようにリストを作成すると、リストList<Field<object>>
の特定のフィールドに任意の値を割り当てることができ、タイプを照会すると「オブジェクト」が取得されます。
事は-そのリストでは、文字列を保持するフィールド、int、日付、さらにはフィールドのリストを持つカスタムオブジェクトを保持するフィールドがほとんど必要ない場合があります...
ジェネリックはそのようなものに対する良い解決策ですか? はいの場合、どのように実装しますか?そうでない場合、より良い方法は何ですか?
---編集---
背景を追加するだけです:
1. フィールドのリストが必要な場合があり、各フィールドは次のように異なるデータ型を保持します:
List<Field<object>> lst = new List<Field<object>>();
lst.Add(new Field<string>());
lst.Add(new Field<int>());
lst.Add(new Field<SomeObjectFromMyApp>());
2. 後で、これらのオブジェクトとその属性をループ内で自動的に照会する必要があります。たとえば、次のようになります。
foreach(Field<object> fld in lst)
{
Type t = fld.Type;
//do some other stuff
}