我有一种情况,我需要一个类,该类需要包含有关在运行时变化的事物的信息,例如:
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
}
我必须将此类的许多实例存储在字典中,但问题是要使用字典,我必须声明一种类型,例如
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
}
}
所以想法是将验证信息存储在一个地方(在字典或其他地方),然后在验证时使用该信息,我还想知道我是否可以以更好的方式设计上述场景?
也许有更好的方法可以做到这一点,请问有什么指导方针吗?