當前位置: 首頁>>代碼示例>>C#>>正文


C# IIdentifierCreationService.EnsureUniqueIdentifiers方法代碼示例

本文整理匯總了C#中System.Workflow.ComponentModel.Design.IIdentifierCreationService.EnsureUniqueIdentifiers方法的典型用法代碼示例。如果您正苦於以下問題:C# IIdentifierCreationService.EnsureUniqueIdentifiers方法的具體用法?C# IIdentifierCreationService.EnsureUniqueIdentifiers怎麽用?C# IIdentifierCreationService.EnsureUniqueIdentifiers使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在System.Workflow.ComponentModel.Design.IIdentifierCreationService的用法示例。


在下文中一共展示了IIdentifierCreationService.EnsureUniqueIdentifiers方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: GetIdentifiersInCompositeActivity

void IIdentifierCreationService.EnsureUniqueIdentifiers(CompositeActivity parentActivity, ICollection childActivities)
{
    if (parentActivity == null)
        throw new ArgumentNullException("parentActivity");
    if (childActivities == null)
        throw new ArgumentNullException("childActivities");

    List<Activity> allActivities = new List<Activity>();

    Queue activities = new Queue(childActivities);
    while (activities.Count > 0)
    {
        Activity activity = (Activity)activities.Dequeue();
        if (activity is CompositeActivity)
        {
            foreach (Activity child in ((CompositeActivity)activity).Activities)
                activities.Enqueue(child);
        }

        //If we are moving activities, we need not regenerate their identifiers
        if (((IComponent)activity).Site != null)
            continue;

        allActivities.Add(activity);
    }

    // get the root activity
    CompositeActivity rootActivity = GetRootActivity(parentActivity) as CompositeActivity;
    ArrayList identifiers = new ArrayList(); // all the identifiers in the workflow
    identifiers.AddRange(GetIdentifiersInCompositeActivity(rootActivity));

    foreach (Activity activity in allActivities)
    {
        string finalIdentifier = activity.Name;

        // now loop until we find a identifier that hasn't been used.
        string baseIdentifier = GetBaseIdentifier(activity);
        int index = 0;

        identifiers.Sort();
        while (finalIdentifier == null || finalIdentifier.Length == 0 || identifiers.BinarySearch(finalIdentifier.ToLower(), StringComparer.OrdinalIgnoreCase) >= 0)
        {
            finalIdentifier = string.Format("{0}{1}", baseIdentifier, ++index);
        }

        // add new identifier to collection 
        identifiers.Add(finalIdentifier);
        activity.Name = finalIdentifier;
    }
}

private static IList GetIdentifiersInCompositeActivity(CompositeActivity compositeActivity)
{
    ArrayList identifiers = new ArrayList();
    if (compositeActivity != null)
    {
        identifiers.Add(compositeActivity.Name);
        IList<Activity> allChildren = GetAllNestedActivities(compositeActivity);
        foreach (Activity activity in allChildren)
            identifiers.Add(activity.Name);
    }
    return ArrayList.ReadOnly(identifiers);
}

private static string GetBaseIdentifier(Activity activity)
{
    string baseIdentifier = activity.GetType().Name;
    StringBuilder b = new StringBuilder(baseIdentifier.Length);
    for (int i = 0; i < baseIdentifier.Length; i++)
    {
        if (Char.IsUpper(baseIdentifier[i]) && (i == 0 || i == baseIdentifier.Length - 1 || Char.IsUpper(baseIdentifier[i + 1])))
        {
            b.Append(Char.ToLower(baseIdentifier[i]));
        }
        else
        {
            b.Append(baseIdentifier.Substring(i));
            break;
        }
    }
    return b.ToString();
}

private static Activity GetRootActivity(Activity activity)
{
    if (activity == null)
        throw new ArgumentException("activity");

    while (activity.Parent != null)
        activity = activity.Parent;

    return activity;
}

private static Activity[] GetAllNestedActivities(CompositeActivity compositeActivity)
{
    if (compositeActivity == null)
        throw new ArgumentNullException("compositeActivity");

    ArrayList nestedActivities = new ArrayList();
    Queue compositeActivities = new Queue();
    compositeActivities.Enqueue(compositeActivity);
    while (compositeActivities.Count > 0)
    {
        CompositeActivity compositeActivity2 = (CompositeActivity)compositeActivities.Dequeue();

        foreach (Activity activity in compositeActivity2.Activities)
        {
            nestedActivities.Add(activity);
            if (activity is CompositeActivity)
                compositeActivities.Enqueue(activity);
        }

        foreach (Activity activity in compositeActivity2.EnabledActivities)
        {
            if (!nestedActivities.Contains(activity))
            {
                nestedActivities.Add(activity);
                if (activity is CompositeActivity)
                    compositeActivities.Enqueue(activity);
            }
        }
    }
    return (Activity[])nestedActivities.ToArray(typeof(Activity));
}
開發者ID:.NET開發者,項目名稱:System.Workflow.ComponentModel.Design,代碼行數:125,代碼來源:IIdentifierCreationService.EnsureUniqueIdentifiers


注:本文中的System.Workflow.ComponentModel.Design.IIdentifierCreationService.EnsureUniqueIdentifiers方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。