Преобразование в лямбду и неожиданные результаты - PullRequest
0 голосов
/ 26 августа 2018

Итак, я получил код "Type1", и он работает нормально. У меня вопрос, почему не работает Type2? Я думал, что они, по сути, делают то же самое, но очевидно, что «Type2» не делает то, что я ожидал, чтобы построить строку JSON для диаграммы Google.

StringBuilder pieData = new StringBuilder();    

//Type2 - Empty string ""
pieData.Clear();
data.Select(point => pieData.Append($@"['{point.Category}', {point.Count}],"));
pieData.ToString().Dump("JSON");


//Type1 - works fine "['F-01', 10],['A-01', 8],"
foreach (PieDatapoint point in data)
{
    pieData.Append($@"['{point.Category}', {point.Count}],");
}
pieData.ToString().Dump("JSON");

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Select является отложенной операцией.Просто позвонив Select, вы не выполняете его.Вы также должны включить .ToArray() или .ToList() или выполнить его, используя цикл foreach.

Если бы вы выполнили это:

data.Select(point => pieData.Append($@"['{point.Category}', {point.Count}],")).ToArray();

Или это:

foreach (var x in data.Select(point => pieData.Append($@"['{point.Category}', {point.Count}],")))
{ }

Тогда код работал бы.

Пожалуйста, имейте в виду, что это работает только потому, что pieData.Append(...) возвращает значение.Если этого не произойдет, ни один из подходов даже не скомпилируется.

0 голосов
/ 26 августа 2018

Вы можете использовать ForEach вместо Select для целевого ответа, если данные List или Array:

data.ForEach(point => pieData.Append($@"['{point.Category}', {point.Count}],"));

Или с помощью Select и Join:

var strings = data.Select(point => $@"['{point.Category}', {point.Count}]").ToList();

string pieData = string.Join(",", strings);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...