【问题标题】:adding spec flow table data into hashtable将规范流表数据添加到哈希表中
【发布时间】:2014-01-03 06:07:55
【问题描述】:
| FieldName | header | code    | 
| a1        | test   |         |
| a1        | test   | 1       |
| a1        | test   | 2       | 
| a1        | test   | 3       | 
| a1        | test   | 4       | 
| a1        | test   | 5       | 
| b2        | prod   | 1       | 
| b2        | prod   | 2       | 
| b2        | prod   | 3       | 

我有以下代码循环遍历表并将数据添加到哈希表中。 目前我的代码只添加了一个 a1 和 b2。但我打算用不同的键将它们全部添加到我的哈希表中。 例如:("a11",value), ("a12",value); (“a13”,值);和 b2..ect 一样。

 public Hashtable GetData(Table table, string headerType)
    {

        var data = table.CreateSet<SpecFlowData>();
        var hashtable = new Hashtable();
        hashtable.Clear();

        foreach (var currentRow in data)
        {
            var key = currentRow.FieldName;
            var value = new Hashtable();

            GetValue(value, currentRow);

            if (hashtable.ContainsKey(key)) //continue;
            {
                var r = new Random();
                key = key + r.Next();
            }
            var format = (string)value["header"];
            if (headerType == format)
            {
                hashtable.Add(key, value);

            }
            break;
        }


        return hashtable;

     }

更新:这里是getvalue方法:

     private static void GetValue(Hashtable value, SpecFlowData currentRow)
      {
        value.Clear();

        value.Add("code", currentRow.Code);
         value.Add("name", currentRow.FieldName);
        value.Add("header", currentRow.HeaderType);
       }

为什么我的数据没有正确添加。感谢您的帮助。

【问题讨论】:

  • 抱歉的意思是“没有正确添加”。
  • GetValue(Value,currentRow) 是做什么的?你为什么每次都做一个新的随机? (以及为什么要使用 random?为什么不使用 int 并使用 key = key + i++?)
  • John..我这样做是为了创建一个随机数作为哈希表的键。我还在帖子中添加了 getvalue 方法。
  • 你为什么要把所有这些都塞进一个随机键名的哈希表中?到目前为止,这看起来像是在滥用哈希表。

标签: c# specflow


【解决方案1】:

您将在第一次迭代结束时打破foreach 循环,因此您的哈希表中只能有一个键值对。

如果您删除break 语句,您将获得更多值。正如@JohnGardner 提到的,您不应该使用随机数,因为它可能产生相同的值。只需使用递增的整数变量。

所以毕竟应该这样做:

public Hashtable GetData(Table table, string headerType)
{
  var data = table.CreateSet<SpecFlowData>();
  var hashtable = new Hashtable(); // no need to clear a newly created Hashtable
  int i = 1;

  foreach (var currentRow in data)
  {
    var key = currentRow.FieldName;
    var value = GetValue(currentRow);

    if (hashtable.ContainsKey(key))
    {
        key = key + i++;
    }
    var format = (string)value["header"];
    if (headerType == format)
    {
      hashtable.Add(key, value);
    }
  }
  return hashtable;
}

private static Hashtable GetValue(SpecFlowData currentRow)
{
  var value = new Hashtable();

  value.Add("code", currentRow.Code);
  value.Add("name", currentRow.FieldName);
  value.Add("header", currentRow.HeaderType);
}

【讨论】:

  • 谢谢你的解释......这就是问题所在。
猜你喜欢
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2016-09-03
  • 2020-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-02
相关资源
最近更新 更多