2011-12-22 66 views
0

我需要获取一个对象并检查它是否已经存在。用整数在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; 
    } 
} 
+0

一些代码将是非常有益的... – 2011-12-22 10:12:13

+0

你有迄今为止尝试过的任何代码示例吗? – 2011-12-22 10:12:59

+3

动机是什么...? – Shai 2011-12-22 10:13:40

回答

0

你可以改变树节点类?我会为标签(名称没有索引)和索引添加属性,使只读Name属性,即

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

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

在你的代码只需要设置索引属性为你所需要的价值,不要担心整个字符串解析的东西

0
string name = "SomeName"; 

string tempName = name; 
int n = 0; 

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

name = tempName; 

这对大量的同一个对象是无效的,但是这不应该发生吗?

反过来这样做的问题,并剥离尾随号码以找到“原始”名称的原始名称可能真的有数字。

例如,你说你添加:

SomeName 
SomeName99 
SomeName 
SomeName99 

上面的代码将会给你

SomeName 
SomeName1 
SomeName99 
SomeName991 
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++; 
}