Поделиться через


Настраиваемое действие для переключения в диапазоне значений

Данный раздел относится к версии Windows Workflow Foundation 4.

В этом образце демонстрируется создание настраиваемого действия, которое расширяет использование Switch. Обычная инструкция Switch позволяет выполнять переключение на основании одного значения. Но существуют бизнес-сценарии, в которых действие должно переключаться в зависимости от диапазона значений. Например, действие может выполнять одну операцию, если значение, по которому производится переключение, находится в диапазоне от 1 до 5, и другую операцию, если значение находится в диапазоне от 6 до 10, а также операцию по умолчанию для всех прочих значений. Это настраиваемое действие выполняет именно такую задачу.

Действие SwitchRange

Действие SwitchRange планирует дочернее действие, если значение результата его выражения входит в диапазон одного из его Cases.

В следующем примере кода показано настраиваемое действие, которое переключается в зависимости от диапазона значений.

public sealed class SwitchRange<T> : NativeActivity where T : IComparable
{
   [RequiredArgument]
   [DefaultValue(null)]
   public InArgument<T> Expression { get; set; }

   public IList<CaseRange<T>> Cases

   [DefaultValue(null)]
   public Activity Default { get; set; }}
}

Свойство

Описание

Expression

Здесь представлено выражение, которое вычисляется и сравнивается с диапазонами в списке вариантов. Результат выражения имеет тип T.

Cases

Каждый вариант состоит из диапазона (From — от и To — до) и операции (Body — тело). Выражение вычисляется и сравнивается с диапазоном значений. Если результат выражения входит в диапазон одного из вариантов, выполняется соответствующее действие.

Default

Действие, выполняемое в случае, если значение не соответствует ни одному варианту. При установке значения null не выполняется ни одно действие.

Класс CaseRange

Класс CaseRange представляет диапазон для действия в SwitchRange. Каждый экземпляр класса CaseRange содержит диапазон (включающий границы From и To) и элемент Body действия, которое планируется для выполнения, если вычисленное выражение в классе SwitchRange попадает в диапазон.

Следующий пример кода является определением для класса CaseRange.

public class CaseRange<T> where T : IComparable
{
    public T From { get; set; }

    public T To { get; set; }

    public Activity Action { get; set; }
}
Dd797581.note(ru-ru,VS.100).gifПримечание
И класс SwitchRange, и класс CaseRange, определенные в образце, являются универсальными классами, которые могут работать с любым типом, реализующим интерфейс IComparable аналогично классу Switch.

Использование образца

В следующем примере кода показано, как использовать действие SwitchRange.

Activity SwitchRange = new SwitchRange<int>
{
    Expression = new InArgument<int>(value),
    Cases = 
    {
        new CaseRange<int>                    
        {
            From = 1,
            To = 5,
            Action = new WriteLine
            {
                Text = "Case 1-5 selected",
            }
        },
        new CaseRange<int>
        {
            From = 6,
            To = 10,
            Action = new WriteLine
            {
                Text = "Case 6-10 selected",
            }
        }
    },
    Default = new WriteLine { Text = "Default Case selected" }
};

Использование этого образца

  1. С помощью Visual Studio 2010 откройте файл решения SwitchRange.sln.

  2. Чтобы построить решение, нажмите клавишу F6.

  3. Чтобы запустить решение, нажмите клавиши CTRL+F5.

Dd797581.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WF\Scenario\ActivityLibrary\SwitchRange