我有一个XML文件,其中包含要检查和验证的项目的“脚本”。它的作用是读取要检查的值,如果该检查为真,它会执行某些操作。我最初写这个只是用整数来工作,但我意识到我需要让它适用于更多的数据类型。
样本检查是这样的......它会看到SomeValue是否大于20。
<If field="SomeValue" test="@gt" value="20" />
*该字段只是一些字符串值。所以对于双倍,该字段将类似于55.7。
我所做的就是对值进行int.TryParse,看看我是否可以将字符串(SomeValue)转换为整数。如果可以的话,我会检查它是否大于20.如果不是,我只是在检查时假设是假的。
有没有人对我如何使用任何数据类型有任何建议? (即string,double,DateTime) Generics会工作吗?我从来没有使用它们所以我不知道它们是否是最好的解决方案。感谢。
答案 0 :(得分:1)
当您不知道类型时,棘手的一点是解析,但这可以通过TypeDescriptor.GetConverter
来完成:
object knownVal = 21; //perhaps obtained from reflection
Type type = typeof(int);
string text = "20";
object val = TypeDescriptor.GetConverter(type)
.ConvertFromInvariantString(text);
int rel = Comparer.Default.Compare(knownVal, val);
泛型是一个选项(特别是Comparer<T>.Default.Compare
),但泛型与仅在运行时已知的Type
值不能很好地混合。它可以完成(MakeGenericType
/ MakeGenericMethod
),但它很丑陋而且有点慢。
老实说,但是:如果是我,我会假设这里需要处理少量类型,特殊情况。