当前位置: 首页>>代码示例>>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;未经允许,请勿转载。