• 【C#】复制物体后,给副本命名的规则——用正则表达式


    需求:已经实现物体复制功能后,给新生成的副本进行命名。

    问题:因为副本也能被复制,即副本的副本,所以复制品的命名规则会如下图所示。


    尝试过用for循环和递归,发现在for循环内部递归返回的话会有问题,导致多次返回,最后一次返回值是递归的最外层,覆盖掉前几次递归的返回值,所以改用不用递归的办法。

    关键是用正则表达式来找出列表中每一个Item的“-副本”重复次数,将重复次数相同的视为同一层级(即从同一个物体复制得到的)。同一层级的Item个数,决定了新副本最末尾加的数字。

        private string ConfirmCopyObjName(Student student)
        {
            string studentName = student.Name + "-副本";
            bool flag = false; // 是否已存在该名字
            foreach (Student s in StudentList)
            {
                if (s.Name.Equals(studentName))
                {
                    flag = true;
                    break;
                }
            }
    
            if (flag) // 已经存在该名字,就在该名字末尾加个数字
            {
                // 判断当前名字中有几个“-副本”
                int copyStepStr = Regex.Matches(studentName, "-副本").Count;
                // 每存在一个同层级的副本,就让末尾数字+1
                int num = 0;
                foreach (Student s in StudentList)
                {
                    if (Regex.Matches(s.Name, "-副本").Count == copyStepStr)
                    {
                        num++;
                    }
                }
                studentName += num;
            }
    
            return studentName;
        }

    一个坑点:

    • 用WPF测试时,发现WPF不能显示单个下划线“_”的!(被转义了?)若想要显示单个下划线“_”,就要写两个下划线“__”。所以改为用减号“-”来命名了。
  • 相关阅读:
    Running ASP.NET Applications in Debian and Ubuntu using XSP and Mono
    .net extjs 封装
    ext direct spring
    install ubuntu tweak on ubuntu lts 10.04,this software is created by zhouding
    redis cookbook
    aptana eclipse plugin install on sts
    ubuntu open folderpath on terminal
    ubuntu install pae for the 32bit system 4g limited issue
    EXT Designer 正式版延长使用脚本
    用 Vagrant 快速建立開發環境
  • 原文地址:https://www.cnblogs.com/guxin/p/csharp-confirm-copy-obj-new-name.html
Copyright © 2020-2023  润新知