簡體   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