C#列表<;T>;自动增长

C#列表<;T>;自动增长,c#,generics,C#,Generics,当我创建一个我已经创建的类并使用新操作符创建两个列表时,当我开始添加数据时,ID号的顺序与这两个列表的顺序相同 在列表1中添加了10条之后,当我开始在列表2中添加10条时,ID号11、12、13开始给出 我想要的每个列表都是增加ID的不同方式 如果你能帮忙,干得好 样本类 public class Listem { private static int xid; public int ID; public DateTime Date; public byte

当我创建一个我已经创建的类并使用新操作符创建两个列表时,当我开始添加数据时,ID号的顺序与这两个列表的顺序相同

在列表1中添加了10条之后,当我开始在列表2中添加10条时,ID号11、12、13开始给出

我想要的每个列表都是增加ID的不同方式

如果你能帮忙,干得好

样本类

public class Listem
{
    private static int xid;
    public int ID;

    public DateTime Date;

    public byte Week;

    public char Process;
    public string PerName;

    public float Pips;


    public Listem(string PerName, char LongShort, byte Hafta, float Pips)
    {
        xid++;
        this.ID = xid;
        this.PerName = PerName;
        this.Process = LongShort;
        this.Week = Hafta;

        this.Pips = Pips;
    }


    public override string ToString()
    {
        return $"ID : {this.ID}\tPerName : {this.PerName}   Tarih : {String.Format("{0:yyyy-MM-dd}", this.Date)}\tİşlem Yönü :    {this.Process}\tHafta :     {this.Week}\tPips :     {this.Pips}";
    }
}
主程序

    static void Main(string[] args)
    {
        List<Listem> Liste_1 = new List<Listem>();
        List<Listem> Liste_2 = new List<Listem>();

        for (int i = 0; i < 10; i++)
        {
            Liste_1.Add(new Listem("Ahmet", '2', 2, 9F));
        }
        for (int i = 0; i < 10; i++)
        {
            Liste_2.Add(new Listem("Mehmet", '3', 4, 19F));
        }
        Console.WriteLine("Liste 1  ===============");
        foreach (var item in Liste_1)
        {
            Console.WriteLine(item);
        }
        Console.WriteLine("Liste 2  ===============");
        foreach (var item in Liste_2)
        {
            Console.WriteLine(item);
        }

    }
static void Main(字符串[]args)
{
List Liste_1=新列表();
List Liste_2=新列表();
对于(int i=0;i<10;i++)
{
列表1.添加(新列表(“Ahmet”,“2',2,9F”);
}
对于(int i=0;i<10;i++)
{
列表2.添加(新列表(“Mehmet”,3',4,19F));
}
Console.WriteLine(“列表1======================”;
foreach(列表1中的变量项)
{
控制台写入线(项目);
}
Console.WriteLine(“列表2======================”;
foreach(列表2中的变量项)
{
控制台写入线(项目);
}
}
结果


要使用现有代码并重置ID,您可以提供一种方法,允许客户端在添加项目之前将
Listem
类上的
static
字段
xid
重置回
0
。然而,这不是一个很好的设计,因为它要求客户机在创建新列表之前知道必须调用此方法

public class Listem
{
    private static int xid;

    // [Other class code here]

    public static void ResetId()
    {
        xid = 0;
    }
}
如果您希望允许用户控制
ID
属性,那么您可能应该将其设置为类的另一个公共属性。哦,就这一点而言,您没有使用属性,而是使用公共字段,这也被认为是一个糟糕的设计。对于公共成员,始终选择属性

不过,这是获得您想要的东西的最快方法:

// Before populating a new list, always reset the xid field to '0'
Listem.ResetId();

for (int i = 0; i < 10; i++)
{
    Liste_1.Add(new Listem("Ahmet", '2', 2, 9F));
}

// Before populating a new list, always reset the xid field to '0'
Listem.ResetId();

for (int i = 0; i < 10; i++)
{
    Liste_2.Add(new Listem("Mehmet", '3', 4, 19F));
}
然后,在创建列表时,您可以使用
for
循环迭代器作为
ID

for (int i = 0; i < 10; i++)
{
    Liste_1.Add(new Listem(i, "Ahmet", '2', 2, 9F));
}

for (int i = 0; i < 10; i++)
{
    Liste_2.Add(new Listem(i, "Mehmet", '3', 4, 19F));
}

如果ID应该根据
列表增加,那么它不应该是
列表的一部分。也许您可以创建另一个类来保存列表和该列表的id?试试看。这感觉像是个XY问题-。为什么需要这个自动递增的数字?为什么?@mjwills我的目标是在两个动作中同时抛出数据。我想在分配此数据时自动分配ID。为什么要这样做?最终的目标是什么?@DennisKuypers我必须使用一个类,我必须在并行程序中连续传输数据。循环。不断地创建不同的类对我来说没有意义。如果你再加上我的经验不足,我相信你会理解问题的严重性;我的目标是在两个动作中同时抛出数据。我想在分配此数据时自动分配ID。我想说清楚,我是初学者。非常感谢你在很短的时间内给了我一个详细的回答,鲁弗斯L。哦,你说得对,这是私人的。另一种选择是添加一个类似于
publicstaticvoidresetid(){xid=0;}
的方法,客户端可以调用该方法来重置id。我会更新答案,但我正在使用手机。非常感谢您的帮助。没问题。我已经用我在评论中提到的方法更新了答案。
for (int i = 0; i < 10; i++)
{
    Liste_1.Add(new Listem(i, "Ahmet", '2', 2, 9F));
}

for (int i = 0; i < 10; i++)
{
    Liste_2.Add(new Listem(i, "Mehmet", '3', 4, 19F));
}
Liste_1.ForEach(Console.WriteLine);
Console.WriteLine(new string('-', Console.WindowWidth));

Liste_2.ForEach(Console.WriteLine);
Console.WriteLine(new string('-', Console.WindowWidth));