Каковы лучшие решения для флэш-карт и графиков? [закрыто]

Это не имеет никакого отношения к циклам.

Это поведение срабатывает, потому что вы используете лямбда-выражение () => variable * 2, где внешняя область variable фактически не определена во внутренней области лямбда.

Лямбда-выражения (в C # 3 +, а также анонимные методы в C # 2) по-прежнему создают реальные методы. Передача переменных этим методам связана с некоторыми дилеммами (передать по значению? Pass по ссылке? C # идет по ссылке - но это открывает еще одну проблему, когда ссылка может пережить реальную переменную). Что C # для решения всех этих дилемм заключается в создании нового вспомогательного класса («замыкание») с полями, соответствующими локальным переменным, используемым в лямбда-выражениях, и методам, соответствующим фактическим лямбда-методам. Любые изменения в variable в вашем коде фактически преобразуются для изменения в этом ClosureClass.variable

. Таким образом, ваш цикл while обновляет ClosureClass.variable до тех пор, пока он не достигнет 10, тогда вы для циклов выполняете действия, которые все работают на одном и том же ClosureClass.variable.

Чтобы получить ожидаемый результат, вам необходимо создать разделение между переменной цикла и переменной, которая закрывается. Вы можете сделать это, введя другую переменную, то есть:

List<Func<int>> actions = new List<Func<int>>();
int variable = 0;
while (variable < 5)
{
    var t = variable; // now t will be closured (i.e. replaced by a field in the new class)
    actions.Add(() => t * 2);
    ++variable; // changing variable won't affect the closured variable t
}
foreach (var act in actions)
{
    Console.WriteLine(act.Invoke());
}

Вы также можете переместить замыкание на другой метод для создания этого разделения:

List<Func<int>> actions = new List<Func<int>>();

int variable = 0;
while (variable < 5)
{
    actions.Add(Mult(variable));
    ++variable;
}

foreach (var act in actions)
{
    Console.WriteLine(act.Invoke());
}

Вы можете реализовать Mult как лямбда-выражение (неявное замыкание)

static Func<int> Mult(int i)
{
    return () => i * 2;
}

или с фактическим вспомогательным классом:

public class Helper
{
    public int _i;
    public Helper(int i)
    {
        _i = i;
    }
    public int Method()
    {
        return _i * 2;
    }
}

static Func<int> Mult(int i)
{
    Helper help = new Helper(i);
    return help.Method;
}

В любом случае «Closures» не являются концепцией, связанной с циклами, но скорее, к анонимным методам / лямбда-выражениям используют локальные переменные с областью - хотя некоторые неосторожное использование циклов демонстрируют закрытие ловушек.

15
задан Alex W 2 July 2012 в 20:33
поделиться

9 ответов

Существует ли причина, что Вы хотите это в Flash? Если простой, старый PNG будет работать, попробуйте Google Chart API.

7
ответ дан 1 December 2019 в 01:17
поделиться

В зависимости от Ваших потребностей пара других Вы могли бы посмотреть на:

Вспышка

flare

Предварительный предохранитель

prefuse

10
ответ дан Neysor 2 July 2012 в 20:33
поделиться
  • 1
    НЕ используйте default_scope. Это заставит все Ваши запросы добавить это условие к полю you' ve установлен. It' s почти НИКОГДА, что Вы хотите. – brad 14 June 2012 в 23:28

Я думаю, что лучшие диаграммы Flash amCharts - симпатичны, высоконастраиваемы и свободны (если Вы не возражаете против ссылки назад на amcharts.com)

3
ответ дан Alan Mendelevich 2 July 2012 в 20:33
поделиться

открытая диаграмма флэш-памяти , потому что Вы не можете изменить размеры .png и .png, не имеет никаких подсказок. Также, почему Вы отправили бы все свои данные Google? Вы доверяете им так очень?

2
ответ дан monk.e.boy 2 July 2012 в 20:33
поделиться
  • 1
    before_validation не установит значения по умолчанию, пока объект не будет готов быть сохраненным. Если процесс должен считать значения по умолчанию прежде, чем сохранить тогда значения won' t быть готов. – mmell 1 September 2012 в 03:10

http://teethgrinder.co.uk/open-flash-chart/ кажется действительно сладким. Я предлагаю, чтобы Вы посмотрели на него.

ОБНОВЛЕНИЕ: Откройте Flash Chart 2 отсутствует: http://teethgrinder.co.uk/open-flash-chart-2/

10
ответ дан 1 December 2019 в 01:17
поделиться

Диаграммы XML/SWF действительно Строят диаграмму от XML:

http://www.maani.us/xml_charts/

2
ответ дан 1 December 2019 в 01:17
поделиться

Я знаю, что Вы сказали, что флэш-память, но это - хороший API диаграммы Silverlight. http://www.visifire.com/. Всегда хороший для хранения опций открывают право?

Должен был включить Silverlight, но можно также смотреть на компонент диаграмм Yahoo! YUI.

2
ответ дан 1 December 2019 в 01:17
поделиться

Я могу ручаться, что у меня был хороший опыт с диаграммами PHP/SWF (и следовательно, диаграммы XML/SWF также). Легко создать действительно тонкие эффекты диаграммы. Круговые диаграммы, постепенно появляющиеся одна часть во время, выглядят довольно профессиональными, не будучи раздражающими.

Править: Царапина, что, Открытая Диаграмма Flash смотрит ПУТЬ лучше. Я отступаю свое предложение.

1
ответ дан 1 December 2019 в 01:17
поделиться

Пакет визуализации данных Adobe теперь бесплатна после выпуска Flash Builder 4.

Диаграммы и другие библиотеки находятся на этом сайте - http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4

0
ответ дан 1 December 2019 в 01:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: