我需要获取一个对象并检查它是否已经存在。
如果是这样,我想添加一个数字,或者增加其名称中的数字。 例如,如果我有对象“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 :(得分: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++;
}