将spec流表数据添加到哈希表中

时间:2014-01-02 20:05:17

标签: c# specflow

| 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);
       }

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

1 个答案:

答案 0 :(得分:0)

您在第一次迭代结束时突然离开foreach循环,因此Hashtable中只能有一个键值对。

如果删除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);
}