C# 为同一类的实例创建唯一id和计数器

C# 为同一类的实例创建唯一id和计数器,c#,.net,C#,.net,我正在创建一个小软件,让您可以在运行时添加控件 我所做的是从控件创建一个派生类,这些控件包括一个静态整数计数器,每次构造该类的实例时,该计数器都会增加。这让我可以创建一个命名约定,这样名称就不会重复。比如我说 this.Name = "Label"+counter; 当我想将其存储在某种自定义序列化中时,问题就出现了。假设我创建了3个标签:Label0、Label1、Label2,然后删除Label1。这将导致Label0和Label2的出现 如果序列化当前状态,然后加载该数据以重建状态,则创

我正在创建一个小软件,让您可以在运行时添加控件

我所做的是从控件创建一个派生类,这些控件包括一个静态整数计数器,每次构造该类的实例时,该计数器都会增加。这让我可以创建一个命名约定,这样名称就不会重复。比如我说

this.Name = "Label"+counter;
当我想将其存储在某种自定义序列化中时,问题就出现了。假设我创建了3个标签:Label0、Label1、Label2,然后删除Label1。这将导致Label0和Label2的出现

如果序列化当前状态,然后加载该数据以重建状态,则创建标签将导致计数器的值为1,即最后一个标签“Label2”的名称。这意味着,如果现在我想创建另一个标签,将是“label(counter+1)”,即“Label2”,从而产生一个重复的标签


我的问题是,哪种方法是创建一个计数器的最佳方法,它可以产生如此简单的命名约定并跳过重复的名称?

使用其他控件序列化计数器,然后您可以加载现有控件并使用计数器值创建新控件。

使用其他控件序列化计数器,然后,您可以加载现有控件,也可以使用计数器值创建新控件。

序列化时,您可能只需保存ID即可……是否仅在没有现有控件时加载序列化控件(或者在加载序列化控件时,等效地销毁所有现有控件)?如果没有,问题就更复杂了,因为您还必须处理现有控件的名称与加载的控件之间的冲突。请尝试此操作。Name=“Label”+GUID(),GUID是唯一的。您可能应该在序列化ID时保存它……是否仅在没有现有控件时加载序列化的控件(或等效地,在加载序列化控件时销毁所有现有控件)?否则,问题会更复杂,因为您还必须处理现有控件的名称与加载的控件之间的冲突。请尝试此操作。Name=“Label”+GUID(),GUID是唯一的。