c# - 如何通过代码泛化分析数据?

标签 c# .net xml generics

我有一个 XML 文件,其中包含要检查和验证的项目“脚本”。它所做的是读入要检查的值,如果该检查为真,它就会执行某些操作。我最初写这个只是为了处理整数,但我意识到我需要让它处理更多的数据类型。

一个示例检查是这样的...它查看 SomeValue 是否大于 20。

<If field="SomeValue" test="@gt" value="20" />

*该字段只是一些字符串值。所以对于 double 来说, field 大约是 55.7。

我所做的就是对值执行 int.TryParse 以查看是否可以将字符串 (SomeValue) 转换为整数。如果可以,我会检查它是否大于 20。如果不是,我就假设检查结果为 false。

有人对我如何处理任何数据类型有任何建议吗? (即字符串、 double 、日期时间) 泛型会起作用吗?我从未使用过它们,所以我不知道它们是否是最佳解决方案。谢谢。

最佳答案

棘手的一点是当你不知道类型时的解析,但这可以用 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 ),但它很丑而且有点慢。

但老实说:如果是我,我会假设这里有少量类型需要处理,并对它们进行特殊处理。

关于c# - 如何通过代码泛化分析数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4474261/

相关文章:

.net - 将项目从 .NET 3.5 移动到 .NET 4.0 : Suddenly Release Handle Failed

c# - C# 'out' 或 'ref' 参数的值何时实际返回给调用方?

c# - 如何获取父节点且只有一个子节点

python - 如何使用 python 的 lxml 在我的 xml 文档中打印实体编号而不是实体名称?

c# - 透明 .NET 窗体中的抗锯齿文本

c# - 用 protected 覆盖​​ protected 内部!

c# - 将 protobuf-net 流转换为 base64 是否会破坏 protobuf 的性能和大小优势?

c# - 具有快照更改检测的 Entity Framework 中的 POCO

c# - DownloadString 和 HttpWebResponse 没有返回完整的 JSON 内容

android - 从 Manifest.xml 中读取应用程序标签和名称