C#List <t>自动递增

时间:2018-06-20 00:20:28

标签: c# generics

当我创建一个自己创建的类并使用new运算符创建两个列表时,当我开始添加数据时,ID编号与两个列表的顺序相同。

将10件商品添加到列表1中后,当我开始将10件商品添加到列表2中时,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);
        }

    }

结果

enter image description here

1 个答案:

答案 0 :(得分:0)

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

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)); } )都摆脱静态字段:

ID

然后,您可以在创建列表时将public class Listem { public int ID { get; set; } public DateTime Date { get; set; } public byte Week { get; set; } public char Process { get; set; } public string PerName { get; set; } public float Pips { get; set; } public Listem(int id, string perName, char longShort, byte hafta, float pips) { ID = id; PerName = perName; Process = longShort; Week = hafta; Pips = pips; } public override string ToString() { return $"ID : {ID}\tPerName : {PerName} Tarih : {Date:yyyy-MM-dd}" + $"\tİşlem Yönü : {Process}\tHafta : {Week}\tPips : {Pips}"; } } 循环迭代器用作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));
}

enter image description here