使用整数增加C#中的名称

时间:2011-12-22 10:10:41

标签: c#

我需要获取一个对象并检查它是否已经存在。

如果是这样,我想添加一个数字,或者增加其名称中的数字。 例如,如果我有对象“a”并且它存在,我需要添加1,因此它被称为a1。 如果a1存在,则a2等

我怎么能这样做?

我的代码:

if (e.TreeNode.Tag is Variant)
{
    if (variantExists(e.TreeNode.Text))
    {
        Random r = new Random();
        int randomNumber = r.Next(0, 99);
        e.TreeNode.Text = e.TreeNode.Text + randomNumber;
        //e.TreeNode.Remove(); 
        return;
    }
}

3 个答案:

答案 0 :(得分:0)

你能改变TreeNode类吗?我会为Label(Name without Name)和Index添加属性,并将Name属性设为只读,即

class TreeNode
{
    public int Index {get;set;}
    public string Label {get;set;}

    public string Name 
    {
        get { return Index == 0 ? Label : Label + Index; }
    }
}

在你的代码中你只需要将Index属性设置为你需要的值,而不用担心整个字符串解析的东西

答案 1 :(得分:0)

string name = "SomeName";

string tempName = name;
int n = 0;

while (DoesNameExist(tempName))
{
    n++;
    tempName = name + n;
}

name = tempName;

这对于大量相同的对象来说是无效的,但这不应该发生吗?

反之这样做的问题,以及剥离尾随数字以找到“原始”名称的原因是原始名称可能真的有数字。

EG。你说你补充说:

SomeName
SomeName99
SomeName
SomeName99

以上代码将为您提供

SomeName
SomeName1
SomeName99
SomeName991

答案 2 :(得分:0)

有些事情可行:

var existingItems = new HashSet<string>();
var items = new List<string>{"a", "b", "a"};
foreach (var item in items)
{
    var tempItem = item;
    var i = 1;
    while (!existingItems.Add(tempItem))
        tempItem = tempItem + i++;
}