C#列表<;T>;自动增长
当我创建一个我已经创建的类并使用新操作符创建两个列表时,当我开始添加数据时,ID号的顺序与这两个列表的顺序相同 在列表1中添加了10条之后,当我开始在列表2中添加10条时,ID号11、12、13开始给出 我想要的每个列表都是增加ID的不同方式 如果你能帮忙,干得好 样本类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
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));