実行時に変化する何かに関する情報を含む必要があるクラスが必要な状況があります。たとえば、次のようになります。
class Info<T>
{
public T Max { get; set; }
public T Min { get; set; }
public T DefaultValue { get; set; }
public T Step { get; set; }
// Some other stuff
}
このクラスの多くのインスタンスを辞書に保存する必要がありますが、辞書を使用するには、たとえば 1 つの型を宣言する必要があるという問題があります。
Dictionary<string, Info<int>> dict = new Dictionary<string, Info<int>>();
この場合、別のタイプの情報を追加することはできませんInfo<double>
。のようなものが欲しいのですが、以下のケースでは汎用バージョンを削除しました。
{"Price", new Info{Min=100,Max=1000,DefaultValue=200,Step=50}}
{"Adv", new Info{Min=10.50,Max=500.50,DefaultValue=20.50,Step=1.5}}
{"Answer", new Info{Min=false,Max=false,DefaultValue=false,Step=false}}
使うことができますDictionary<string, Object> dict = new Dictionary<string, Object>();
しかし、dictアイテムを取得すると、それがどのタイプなのかわかりません。タイプも知る必要があります。たとえば、Price
それは int で、 Adv は double です。実行時にどのように知ることができますか?
実際にバリデーターを作成したい (.Net Compact Framework 3.5 を使用している/組み込みシステムが存在する場合は使用できない) たとえば、以下のようなクラスがある場合..
class Demo
{
public int Price { get; set; }
public float Adv { get; set; }
public static bool Validate(Demo d)
{
List<string> err = new List<string>();
// here I have to get Info about the Price
// from dictionary, it can be any storage
Info priceInfo = GetPriceInfo("Price");
if (d.Price < priceInfo.Min)
{
d.Price = priceInfo.Min;
err.Add("price is lower than Min Price");
}
if (d.Price > priceInfo.Max)
{
d.Price = priceInfo.Max;
err.Add("price is above than Max Price");
}
// need to do similar for all kinds of properties in the class
}
}
したがって、検証情報を1つの場所(辞書または別の場所)に保存し、検証時にその情報を使用することも考えられます.上記のシナリオをより良い方法で設計できるかどうかも知りたいですか?
これを行うためのより良い方法があるかもしれませんが、ガイドラインを教えてください。