字典中的响应未定义“ GetEnumerator”

时间:2018-11-04 11:09:03

标签: c# dictionary

即时通讯是C#的新功能,但我找不到针对我的问题的明确响应。我的代码是:

“{% url ‘test:justatest’ id=8 %}”

它使用:

$res_string = $res_string."<tr><td>".$row["cid"]."</td><td>".$row["cname"]."</td><td>".$row["caddress"]."</td><td>".$row["cgstno"]."</td><td>".$row["ctel"]."</td><td class='edit' onclick=\"EditClient(\"$edit_query\");\">Edit</td><td>Delete</td></tr>";

我想通过以下方式自动创建它:

<td class='edit' onclick=\"EditClient(\"$edit_query\");\"

但是我有一个错误:

  

错误CS1579:因为“帖子”不包含“ GetEnumerator”(CS1579)(helloApp)的公共定义,因此foreach语句无法对“帖子”类型的变量进行操作

  • //我想在字典中自动搜索。

编辑:

我想使用公共类帖子(例如fe)中的项目生成myDict:

现在我正在做

myDict.Add("BTC",jsonResponse.BTC);
myDict.Add("LTC", jsonResponse.LTC);
myDict.Add("DASH", jsonResponse.DASH);
myDict.Add("ETH", jsonResponse.ETH);

我想做foreach:

using System;
using System.Collections;


namespace helloApp

{

public class Posts
{

    public string BTC { get; set; }
    public string DASH { get; set; }
    public string ETH { get; set; }
    public string LTC { get; set; }

}


}

自动获得与myDict.Add(“ BTC” ...等...)相同的结果

编辑:

根据回答,谢谢您的帮助:

您必须制作一个字典变量:

foreach(string x in jsonResponse){
    Console.WriteLine(x);
}

然后将元素添加到myDict:

myDict.Add("BTC",jsonResponse.BTC);
myDict.Add("LTC", jsonResponse.LTC);
myDict.Add("DASH", jsonResponse.DASH);
myDict.Add("ETH", jsonResponse.ETH);

您可以使用它:

myDict.Add(string X,jsonResponse.X)

因为Microsoft教程使难度变得更大。

1 个答案:

答案 0 :(得分:1)

您可以尝试通过GetProperties方法使用反射来获取所有属性,然后将它们添加到字典中。

var myDict = new Dictionary<string, string>();

foreach (var prop in jsonResponse.GetType().GetProperties())
{
    if (!myDict.ContainsKey(prop.Name))
        myDict.Add(prop.Name, prop.GetValue(jsonResponse)?.ToString());
}

或者您可以使用linq ToDictionary的简单方法。

var myDict1 = jsonResponse.GetType()
                        .GetProperties()
                        .ToDictionary(x => x.Name, x => x.GetValue(jsonResponse)?.ToString());

如果要获取值和键,则需要从字典中进行迭代器,因为foreach实现了iterator pattern,该对象需要实现IEnumerable接口,并且该集合具有对iterator的行为。

foreach (var item in myDict)
        Console.WriteLine(item.Key + "  "+ item.Value);