繁体   English   中英

验证类列表C#中的字符串

[英]Validating a String in a Class List C#

我在C#控制台应用程序中制作了一个项目,它是学校的运动俱乐部管理软件。 我创建了一个班级列表运动员,我有几个参数,其中之一是运动员的ID ...我的问题是,当我选择“添加运动员”选项时,如何检查整个ID是否已经存在名单。 您可能会想:“哦,好吧,它漂亮的ez,只是执行一会儿,并在其中使用for方法并使用Contain方法...”好吧,我尝试过,但我还不太清楚...现在已经编程了几个月了...不是我是一个非常熟练的程序员,而是:/ ...

  1. 这是我尝试做的:

      do { for (int i = 0; i < Athletes.Count; i++) { if (Athletes[i].id.Contains(id)) { Console.WriteLine("ID already exists, please insert another ID!"); Console.WriteLine(); Console.Write("Id: "); id = Console.ReadLine(); } } } while (Athletes[i]); 

事实是,正如您所看到的,我无法在执行操作时使用[i],这使得无法浏览列表。 我考虑过要使用布尔值,但是我不是很喜欢布尔值。 这可能是解决问题的先决条件,但我真的无法解决。 多谢你们。 :)

尝试使用Linq

  using System.Linq; 

  ...

  // Keep asking id... 
  while (true) {
    if (!Athletes.Any(athlete => athlete.ID == id)) 
      break; // ... until id is not found

    Console.WriteLine("ID already exists, please insert another ID!");
    Console.WriteLine();
    Console.Write("Id: ");

    id = Console.ReadLine(); 
    //TODO: validate id here 
 } 

请注意,您必须验证用户输入:如果用户输入id"bla-bla-blas" ,该怎么办?

您是说AthletesList<Athlete>还是类似的东西? 您可以使用.Any()检查泛型列表的任何成员是否满足给定谓词。 例如:

if (Athletes.Any(a => a.id == id))

如果Any()返回true则意味着列表中至少一个成员满足条件。

在Athlete类中重写Equals()

public override bool Equals (Object otherAthlete) {
    if (otherAthlete == null) return false;
    if (! otherAthlete is typeof(Athlete)) return false;

    return this.ID == otherAthlete.ID;
}

这将使List<Athelete>.Contains()工作。 无需重复。

public void Add (Athlete newAthlete) {
    if (newAthelete == null) return;

    if (! athleteList.Contains(newAthlete)) 
       athleteList.Add(newAthlete);

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM