[英]Validating a String in a Class List C#
我在C#控制台應用程序中制作了一個項目,它是學校的運動俱樂部管理軟件。 我創建了一個班級列表運動員,我有幾個參數,其中之一是運動員的ID ...我的問題是,當我選擇“添加運動員”選項時,如何檢查整個ID是否已經存在名單。 您可能會想:“哦,好吧,它漂亮的ez,只是執行一會兒,並在其中使用for方法並使用Contain方法...”好吧,我嘗試過,但我還不太清楚...現在已經編程了幾個月了...不是我是一個非常熟練的程序員,而是:/ ...
這是我嘗試做的:
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"
,該怎么辦?
您是說Athletes
是List<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.