Ответ в словаре не имеет определения для «GetEnumerator» - PullRequest
0 голосов
/ 04 ноября 2018

Я новичок в C #, но я не могу найти четкий ответ на мою проблему мой код:

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

Его использование:

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

}


}

Я хочу сделать это автоматически:

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

но у меня ошибка:

Ошибка CS1579: оператор foreach не может работать с переменными типа 'Posts', потому что 'Posts' не содержит публичного определения для 'GetEnumerator' (CS1579) (helloApp)

  • // Я хочу автоматически искать в своем словаре.

Отредактировано:

Я хочу сгенерировать myDict, используя элементы из публикаций публичного класса, например:

Сейчас я делаю

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

Я хочу сделать foreach:

myDict.Add(string X,jsonResponse.X)

для автоматического получения того же результата, что и в myDict.Add ("BTC" ... и т.д ...)

Edit:

Согласно ответу, спасибо за помощь:

Вы должны сделать словарь переменной:

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

затем добавьте элементы в myDict:

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

и вы можете использовать его:

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

Потому что учебники Microsoft делают его более сложным, чем он есть.

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете попытаться использовать отражение методом 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 реализует шаблон итератора , какой объект должен реализовывать интерфейс IEnumerable, и эта коллекция имеет поведение для итератора.

foreach (var item in myDict)
        Console.WriteLine(item.Key + "  "+ item.Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...