【问题标题】:how to filter out DateTime type of values from all hashtable value?如何从所有哈希表值中过滤掉 DateTime 类型的值?
【发布时间】:2010-12-16 05:30:42
【问题描述】:

我需要将所有 DateTime 值转换为字符串,尽管在我的项目中,我最后的所有代码都遵循 1 个函数,其中我有 4 个不同的哈希表(实际上是 CookComputing xmlrpc 库的 XmlRpcStruct 对象)。

有没有什么方法可以在不迭代每个哈希表的情况下 - 我可以转换具有日期时间的哈希表的值 -> 字符串。

没有迭代 - 我的意思是让处理更快,但我需要为嵌套的哈希表解决它,其中 key 也包含另一个哈希表。

【问题讨论】:

  • 您能否提供更多有关如何填充哈希表以及如何将它们发送到服务器的详细信息?

标签: c# .net reflection hashtable


【解决方案1】:

您可以在发送到该服务器之前处理您的哈希表。检查每个对象。真的是DateTime吗,那就换成合适格式的.ToString吧。

public static void ProcessHT(Hashtable ht)
{
    Hashtable dates = new Hashtable();

    foreach(DictionaryEntry de in ht)
    {
        if (de.Value is DateTime)
            dates.Add(de.Key, de.Value);
    }

    foreach(DictionaryEntry de in dates)
    {
        ht.Remove(de.Key);
        ht.Add(de.Key, ((DateTime)de.Value).ToString("s"));
    }
}

public static void RunSnippet()
{
    Hashtable ht = new Hashtable();

    ht.Add("1", "one");
    ht.Add("date", DateTime.Today);
    ht.Add("num", 1);
    Print(ht);
    WL("---");
    ProcessHT(ht);
    Print(ht);
}

private static void Print(Hashtable ht)
{
    foreach (DictionaryEntry de in ht)
    {
        WL("{0} = {1}", de.Key, de.Value);
    }
}

【讨论】:

  • 如果我嵌套了哈希表怎么办,我发现我的哈希表本身包含另一个哈希表。 (汗水)
  • 这有点违背了你的问题的目的,因为你问的是有没有办法在不迭代的情况下转换所有 DateTime 值......这是迭代。
  • 是的 james,但即使现在迭代导致嵌套哈希表出现错误,我也被卡住了。
  • 如果有嵌套哈希表,在 ProcessHT 方法中检查它并再次递归调用它: if (de.Value is Hashtable) ProcessHT((Hashtable)de.Value);
【解决方案2】:

为什么不能在将日期添加到哈希表时将其转换为时间?

myHashTable.Add("ADate", DateTime.Now.ToString());

【讨论】:

  • 因为 DateTime 的出现次数超过 150 次,并且开发人员以后可能会因为忘记将其转换为字符串而出错,因为到目前为止我们使用将 DateTime - 传递给 Server 而现在 Server 没有接受较新版本的 DateTime !!! |)
  • 究竟是如何传递给服务器的?完整的哈希表还是哈希表迭代并传递了单个值?
  • 您的哈希表类型是如何定义的?哈希表?
  • 我很困惑,因为 Hashtable 只接受对象值,所以你必须在某处进行某种形式的从对象到类型的转换?
  • "date":DateTime.Now 像这样...是的,也有一些类型转换
猜你喜欢
  • 1970-01-01
  • 2013-12-11
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-19
  • 1970-01-01
相关资源
最近更新 更多